Как передать один тип в шаблон c, определенный в Rust с двумя типами? - PullRequest
2 голосов
/ 02 мая 2020

Предположим, у меня есть такая функция:

fn my<T: fmt::Debug, U>(x: T) {
    println!("{:?}", mem::size_of::<U>());
    println!("{:?}", x);
}

Это зависит от двух типов T и U. Я должен указать тип U при вызове функции my. С другой стороны, тип T можно определить по переданному x, поэтому, это логично, я могу пропустить его при вызове.

Когда я пытаюсь:

my::<u8>(10);

I получить ошибку:

error[E0107]: wrong number of type arguments: expected 2, found 1

Как правильно сказать компилятору Rust получить тип T из переданного x и передать U только в <...>?

1 Ответ

4 голосов
/ 02 мая 2020

В Rust _ в позиции типа используется, чтобы попросить компилятор сделать вывод:

let foo: Vec<_> = (1..10).map(|i| i.to_string()).collect();
//           ^ collect in a vector whose type should be obvious

Это также работает в вашем случае:

my::<_, u8>(10);
//   ^ infer `T`

( Постоянная ссылка на игровую площадку )

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...