这方面的锈迹一开始看起来很奇怪,我想知道是怎么回事
for
在这种情况下打字是有效的。
fn sum1(v: &mut Vec<i32>) -> i32 {
// I know I don't mutate v, but that's not the point
let mut s = 0;
for e in v {
s += *e;
// s += e; <- Err!
}
s
}
fn sum2(v: &Vec<i32>) -> i32 {
let mut s = 0;
for e in v {
s += e; // Okay?
}
s
}
fn main() {
let mut v = vec![1, 2, 3];
println!("{}", sum1(&mut v));
println!("{}", sum2(&v));
}
sum1
AddAssign<&mut i32>
没有实现,所以我看到了
e
是
&mut i32
. 真是太棒了
e
sum2
编译?看起来好像
AddAssign<&i32>
确实实现了(我单独测试过),所以它可能正在使用它
AddAssign
&i32
e
只是
i32
. 我的问题归结为:
安
i32号
,或
&
?
我对参考文献的了解不多,不足以让我自己轻松地检查差异(通过使用
i32号
以及检查是否有撞车事故)。
&i32号
类型可以用
How do I print the type of a variable in Rust?
,这对于处理这些问题很有用,但不能直接回答for循环的工作方式。
What is the exact definition of the for loop in Rust?
帮助很大,而且
What is the difference between iter and into_iter?
IntoIterator
可能导致循环混乱的特性。