在下面的 rust 代码中,为什么这两个函数
mutate_value()
在取消引用 how_much 参数和不取消引用 how_much 参数的情况下工作?因为我要添加对该值的引用,所以这不应该起作用吗?
fn mutate_value(value: &mut i32, how_much: &i32) {
*value += how_much
}
// fn mutate_value(value: &mut i32, how_much: &i32) {
// *value += *how_much
// }
fn main() {
let mut value = 5;
let how_much = 10;
mutate_value(&mut value, &how_much);
println!("value: {}", value);
}
i32
,以及其他数字基元,为两种不同的右侧类型实现AddAssign
。
你的两个函数分别使用了其中的每一个。当
AddAssign
impls 不相同时,您可以清楚地看到它。 (游乐场)
#[derive(Debug, Clone, Copy)]
struct A(i32);
impl AddAssign for A {
fn add_assign(&mut self, other: A) {
println!("By value");
self.0 += other.0;
}
}
impl AddAssign<&A> for A {
fn add_assign(&mut self, other: &A) {
println!("By reference");
// The . operator dereferences
self.0 += other.0;
}
}
fn main() {
let mut a = A(4);
let b = A(6);
// By value
a += b;
let c = &b;
// By reference
a += c;
dbg!(a);
}