Что означает операнд + между типами?

На этом примере из ядро:: любой

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.

Что на самом деле здесь делает +, как он называется? Где я могу найти документы по этому поводу?

Тим дал вам ответ. Что касается алгебраических типов: в Rust типы произведений — это structs и кортежи, а типы суммы — enums.

mcarton 08.04.2019 19:19
Почему Python в конце концов умрет
Почему Python в конце концов умрет
Последние 20 лет были действительно хорошими для Python. Он прошел путь от "просто языка сценариев" до основного языка, используемого для написания...
1
1
80
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

T: Any + Debug — это связанная черта. Тип T должен удовлетворять Anyа такжеDebug, поэтому здесь используется знак + и он не имеет отношения к алгебраическим типам. Вы можете прочитать больше о трейтах в соответствующий раздел в книге.

Эта секция упоминает знак +.

Другие вопросы по теме