类型之间的+操作数是什么意思?

问题描述 投票:1回答:1

这个例子来自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操作数。我假设它像algebraic types,因此将是Any类型与Debug类型;但是,我在Rust中找不到代数类型下的任何文档。

什么是+实际在这里做什么,它叫什么?我在哪里可以找到关于此的文档?

rust algebraic-data-types static-typing
1个回答
5
投票

T: Any + Debug是一个trait bound。类型T必须满足AnyDebug,因此这里使用+符号,它与代数类型无关。您可以在corresponding section in the book上阅读更多关于特征的信息。

This section提到+标志。

© www.soinside.com 2019 - 2024. All rights reserved.