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

时间:2014-05-28 20:12:08

标签: 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);
}

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

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

10
5

我是否正确地假设test仍为5,因为数据已复制而已增加? test函数可以突变原始increment变量的唯一方法是将其作为Box<int>发送,对吗?

1 个答案:

答案 0 :(得分:8)

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

您必须使用取消引用运算符*取消引用才能获取int。这将有效let sum = *number + *number;

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

  

我是否正确地认为测试仍为5,因为数据已被复制   增加?原始测试变量的唯一方法   如果它被发送为,则由增量函数进行变异   盒子,对吧?

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

PS:改变它

fn increment(number: &mut int) {
    *number = *number + *number;
    println!("{}", number);
}