2015-12-18 61 views
9

我已经看过Vec<_>几次了。例如:什么是Vec <_>?

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

但是'不确定的脸'<_>是什么意思?

我已经习惯了在尖括号类型名,但可以说是什么类型的? 我知道的下划线的唯一含义是来自Python,作为未使用变量的名称。

回答

10

这意味着“锈编译器,推断进入Vec什么类型”。它确实类似于Python中的未使用变量(以及Rust本身),因为它表示一个类型的占位符,就像它可以表示变量名的占位符。

你可以找到解释锈病编程语言章约iterator consumers

使用_会让您提供部分提示:

let one_to_one_hundred = (1..101).collect::<Vec<_>>();这是说 “收集成Vec<T> ,请,但推断什么T是给我的。“ _是 有时称为“类型占位符”出于这个原因。

+2

谢谢!由于某些原因,文档中的泛型章节没有提及任何有关参数类型推断的内容。 – Amomum

+0

是否有任何特别关于'_'语法的文档?我找不到任何。在解释迭代器时,我只能找到使用它的地方。 – Lii

+0

@Li我认为这是目前唯一提到的地方。 github上记录该功能的问题已经关闭,并将该段添加到迭代器部分:https://github.com/rust-lang/rust/pull/22293 –