函数调用后生锈的可变性要求

mutability requirement in rust after a function call

为什么mut不需要

#[allow(dead_code)]
fn addo2(v: Vec<u64>, oi: Option<u64>) -> Vec<u64> {
    oi.into_iter().fold(v, |mut v, i| add(v, i)) //warning: variable does not need to be mutable
}

#[allow(dead_code)]
fn add(mut v: Vec<u64>, i: u64) -> Vec<u64> {
    v.push(i);
    v
}

如预期的那样,此代码需要它时

fn addo(v: Vec<u64>, oi: Option<u64>) -> Vec<u64> {
    oi.into_iter().fold(v, |mut v, i| {
        v.push(i);
        v
    })
}

https://play.rust-lang.org/?version=stable&mode=debug&edition=2018&gist=097bb3c3cd5c8cd7aa69c5bfafd177fc

v.push(i); vadd(v, i)的区别是前者就地修改v,而后者通过v 转换为 add,并返回一个(可能不相关的)值。 mut 指修改您拥有的东西,因此在将所有权转让给他人时不适用。