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>,对吗?
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)
| 归档时间: |
|
| 查看次数: |
3581 次 |
| 最近记录: |