1 unstable release
0.1.0 | Jan 11, 2024 |
---|
#2137 in Rust patterns
7KB
Mutify
Macro for coercing a mut var: T
or var: &mut T
into a &mut T
.
Why
A naive apporach would be putting a &mut
before the expression,
however this doesn't work.
let func = |v: &mut i32| *v += 1;
let mut b = 0;
let a = &mut b;
// `a` is not mutable.
func(&mut a);
Example
fn plus_one(n: &mut i32) {
*n += 1;
}
let mut a = 3;
plus_one(mutify!(a));
assert_eq!(a, 4);
let b = &mut a;
plus_one(mutify!(b));
assert_eq!(a, 5);
Note
A magic function called __coerce_mut
is used here, don't name your
functions that and you are good!
lib.rs
:
Macro for coercing a mut var: T
or var: &mut T
into a &mut T
.
Why
A naive apporach would be putting a &mut
before the expression,
however this doesn't work.
let func = |v: &mut i32| *v += 1;
let mut b = 0;
let a = &mut b;
// `a` is not mutable.
func(&mut a);
Example
fn plus_one(n: &mut i32) {
*n += 1;
}
let mut a = 3;
plus_one(mutify!(a));
assert_eq!(a, 4);
let b = &mut a;
plus_one(mutify!(b));
assert_eq!(a, 5);
Note
A magic function called __coerce_mut
is used here, don't name your
functions that and you are good!