Vec<_>是什么?

39

我已经多次看到 Vec<_>。例如:

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

但是那个“不确定的脸”<_>代表什么意思呢?

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

1个回答

41
这句话的意思是“Rust编译器,推断出应该放入Vec中的类型”。它确实类似于Python(以及Rust本身)中未使用的变量,因为它代表了一个类型的占位符,就像它可以代表变量名的占位符一样。
您可以在《Rust编程语言》关于迭代器消费者的章节中找到解释:
引用块:

使用 _ 将让你提供部分提示:

let one_to_one_hundred = (1..101).collect::<Vec<_>>(); 这表示 “请将其收集到Vec中,但请为我推断出T的类型。” 因此,_ 有时被称为“类型占位符”。


3
谢谢!由于某种原因,文档中的泛型章节未提及参数类型推断。 - Amomum
有没有关于 _ 语法的具体文档?我找不到任何相关资料。我只能在迭代器解释时找到使用它的文本。 - Lii
@Lii 我认为现在只有这里提到了这个功能。GitHub 上记录该功能的问题已经关闭,将该段落添加到迭代器部分:https://github.com/rust-lang/rust/pull/22293 - Paolo Falabella

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接