rust - 类型之间的 + 操作数是什么意思?
问题描述
这个例子来自core::any
use std::fmt::Debug;
use std::any::Any;
// Logger function for any type that implements Debug.
fn log<T: Any + Debug>(value: &T) {
let value_any = value as &dyn Any;
// try to convert our value to a String. If successful, we want to
// output the String's length as well as its value. If not, it's a
// different type: just print it out unadorned.
match value_any.downcast_ref::<String>() {
Some(as_string) => {
println!("String ({}): {}", as_string.len(), as_string);
}
None => {
println!("{:?}", value);
}
}
}
// This function wants to log its parameter out prior to doing work with it.
fn do_work<T: Any + Debug>(value: &T) {
log(value);
// ...do some other work
}
fn main() {
let my_string = "Hello World".to_string();
do_work(&my_string);
let my_i8: i8 = 100;
do_work(&my_i8);
}
这是我第一次看到+
类型之间的操作数Any + Debug
。我假设它像代数类型,因此将是一个Any
有类型的Debug
类型;但是,我在 Rust 中找不到代数类型下的任何文档。
这里+
实际上在做什么,它叫什么?我在哪里可以找到这方面的文档?
解决方案
推荐阅读
- java - 如何使用 UCanAccess 库在日期范围内进行过滤
- wpf - 如何忽略/覆盖父级的数据模板?
- vb.net - JSON 未反序列化为自定义类
- android - 我的 recyclerview 没有显示我的数组列表
- visual-studio-code - 如何在复制粘贴时覆盖 VS Code 中的文件(而不是将 *.1* 附加到文件名)?
- drools - 解释分数 KIE Workbench
- r - R 记分卡包 ID 列
- asp.net-core - 跟踪来自 ASP.NET Core 服务的每个响应代码
- c# - IText7 pdf2Data 它与c#核心兼容吗?
- javascript - 无法删除重复的项目