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>
发送,对吗?
答案 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);
}