Еще одна работа вокруг этого & ldquo; TypeError: Невозможно выполнить итерацию по скалярному тензору & rdquo; для матплотлиб?

Идиоматическое решение

Создайте признак, который сдерживает параметр T в foo, реализует любое конкретное поведение как ассоциированную функцию этого признака.

Пример:

trait PrintMe {
    fn print_me(&self);
}

impl PrintMe for String {
    fn print_me(&self) { println!("I am a string"); }
}

struct Foo {
    zaz: String,
    bar: T
}

fn main() {
    // ...
    x.bar.print_me();
}

Это принципиальное общее программирование, где вы точно определяете разницу в поведении возможных общих параметров, так что нет ничего удивительного.


Точное решение

Rust действительно может запрашивать типы: каждый тип имеет уникальный TypeId , и вы можете сопоставлять TypeId с серией проверок if , Это неуклюже.

fn print_me(x: &Foo) {
    if TypeId::of::() == TypeId::of::() {
        println!("I am a string");
    } else // ...
}

Но, пожалуйста ... не делайте этого:)

1
задан user8851623 27 March 2019 в 03:02
поделиться