turbofish
fn main() {
let numbers: Vec<i32> = vec![
1, 2, 3, 4, 5, 6, 7, 8, 9, 10,
];
let even_numbers = numbers
.into_iter()
.filter(|n| n % 2 == 0)
.collect();
println!("{:?}", even_numbers);
}
以上代码会报错,因为编译器并不知道 even_numbers
的类型。
为解决这个问题,可以直接指定 even_numbers
的类型:
let even_number: Vec<i32> = ...
或是使用 turbofish 语法:
let even_numbers = numbers
.into_iter()
.filter(|n| n % 2 == 0)
.collect::<Vec<i32>>();
collect()
的函数签名为:fn collect<B>(self) -> B
。使用 turbofish ::<>
相当于指定了泛型<B>
的类型。