为什么二元+运算符不适用于两个&mut int?

Chr*_*oph 6 rust

fn increment(number: &mut int) {

    // this fails with: binary operation `+` cannot be applied to type `&mut int`
    //let foo = number + number;

    let foo = number.add(number);

    println!("{}", foo);
}

fn main() {
    let mut test = 5;
    increment(&mut test);

    println!("{}", test);
}
Run Code Online (Sandbox Code Playgroud)

为什么number + number失败但number.add(number)有效?

作为奖励问题:以上打印出来

10
5
Run Code Online (Sandbox Code Playgroud)

我是否正确地假设test仍然是5因为数据被复制到增量?原始test变量可以被increment函数变异的唯一方法是,如果它被发送为Box<int>,对吗?

A.B*_*.B. 8

number + number失败是因为它们是两个引用,而不是两个整数.编译器还告诉我们原因:+该类型没有实现运算符&mut int.

您必须使用dereference运算符取消引用*才能获取int.这会奏效let sum = *number + *number;

number.add(number); 因为add的签名是有效的 fn add(&self, &int) -> int;

我是否正确地认为测试仍然是5,因为数据被复制到增量?原始测试变量可以通过增量函数进行变换的唯一方法是它是否以Box形式发送,对吧?

测试不会被复制,但仍然是5,因为它从未实际变异.如果你愿意,你可以在增量函数中改变它.

PS:改变它

fn increment(number: &mut int) {
    *number = *number + *number;
    println!("{}", number);
}
Run Code Online (Sandbox Code Playgroud)