2015-12-18 5 views
9

Я видел Vec<_> пару раз уже. Например:Что такое Vec <_>?

let a = "line1\r\nline2\nline3"; 
println!("{:?}", a.lines().collect::<Vec<_>>()); 

Но что это 'неопределенное лицо' <_> означает?

Я привык к typename в угловых скобках, но какой тип может быть? Единственное значение подчеркивания, о котором я знаю, это Python как имя неиспользуемой переменной.

ответ

10

Это означает «Компилятор ржавчины, укажите, какой тип идет в Vec». И это действительно аналогично неиспользуемой переменной в Python (и в самой Rust), поскольку она представляет собой местозаполнитель для типа, например, может представлять собой заполнитель для имени переменной.

Вы можете найти объяснение в Ржавчина Язык программирования глава о iterator consumers:

Используя _ позволит вам обеспечить частичную подсказку:

let one_to_one_hundred = (1..101).collect::<Vec<_>>(); Это говорит «Сбор в Vec<T> , пожалуйста, но сделайте вывод, что для меня T. " По этой причине _ - это .

+2

Спасибо! По какой-то причине глава generics в документах ничего не говорит о выводе типа параметра. – Amomum

+0

Есть ли какая-либо документация где-то конкретно о синтаксисе '_'? Я не могу найти. Я только нахожу текст, где он используется, когда объясняются итераторы. – Lii

+0

@ Lii Я думаю, что это единственное место, о котором упоминалось сейчас. Вопрос о github для документирования функции закрыт, добавив этот пункт в раздел итераторов: https://github.com/rust-lang/rust/pull/22293 –

Смежные вопросы