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>
发送,函数将是,对吧?
最佳答案
number + number
失败,因为它们是两个引用,而不是两个整数。编译器还告诉我们原因:+
运算符未针对 &mut int
类型实现。
您必须使用取消引用运算符 *
取消引用才能获得 int。这可行 let sum = *number + *number;
number.add(number);
有效是因为 add 的签名是 fn add(&self, &int) -> int;
Am I right to assume that test is still 5 because the data is copied over to increment? The only way that the original test variable could be mutated by the increment function would be if it was send as Box, right?
Test 没有被复制过来,但仍然是 5,因为它实际上从未发生过变异。如果需要,您可以在增量函数中改变它。
PS: 改变它
fn increment(number: &mut int) {
*number = *number + *number;
println!("{}", number);
}
关于rust - 为什么二进制 + 运算符不能与两个 &mut int 一起使用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23920968/