代码之家  ›  专栏  ›  技术社区  ›  Nicholas Pipitone

for循环是按引用操作还是按值操作?[复制]

  •  3
  • Nicholas Pipitone  · 技术社区  · 7 年前

    这方面的锈迹一开始看起来很奇怪,我想知道是怎么回事 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 可能导致循环混乱的特性。

    0 回复  |  直到 7 年前
    推荐文章