在下面的rust代码中,为什么两个函数mutate_value()
都使用和不解引用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
。
&i32
i32
这两个函数分别使用其中的每一个。当AddAssign
imps不相同时,您可以清楚地看到它。(游乐场)
#[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);
}