如果我参选
fn my_func(v: Vec<i64>) {
let sum = v.into_iter().sum();
}
fn main() {
}
然后Rust希望我提供一个类型注解并编写
v.into_iter().sum::<i64>()
我只是想弄明白--为什么?
如果我参选
fn my_func(v: Vec<i64>) {
let sum = v.into_iter().sum();
}
fn main() {
}
然后Rust希望我提供一个类型注解并编写
v.into_iter().sum::<i64>()
我只是想弄明白--为什么?
如果你看看sum
method on Iterator
的定义
你可以看到它是泛型的,输出类型为S: Sum<Self::Item>
.
这意味着您可以自由地为您自己的类型实现Sum
特征,并将Vec<i64>
加到您的自定义类型中.因此,编译器无法推断类型应该是什么.
顺便说一下,输出是S
而不是Option<S>
.空向量的sum::<i64>
是0
.
拉斯特本可以决定用"你的"方式来定义"和":
fn sum(self) -> Option<Self::Item>
where
Self::Item : Add<Output=Self::Item>
但他们并没有让它变得更笼统.