#mut #macro #coerce

mutify

宏,用于将 mut var: Tvar: &mut T 转换为 &mut T

1 个不稳定版本

0.1.0 2024年1月11日

#1713 in Rust 模式

MIT/Apache

7KB

Mutify

Crates.io Docs

宏,用于将 mut var: Tvar: &mut T 转换为 &mut T.

原因

一个简单的方法是在表达式前加上 &mut,但这不起作用。

let func = |v: &mut i32| *v += 1;
let mut b = 0;
let a = &mut b;
// `a` is not mutable.
func(&mut a);

示例

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);

注意

这里使用了一个名为 __coerce_mut 的魔法函数,不要将你的函数命名为这个名字,这样你就没问题了!


lib.rs:

宏,用于将 mut var: Tvar: &mut T 转换为 &mut T.

原因

一个简单的方法是在表达式前加上 &mut,但这不起作用。

let func = |v: &mut i32| *v += 1;
let mut b = 0;
let a = &mut b;
// `a` is not mutable.
func(&mut a);

示例

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);

注意

这里使用了一个名为 __coerce_mut 的魔法函数,不要将你的函数命名为这个名字,这样你就没问题了!

无运行时依赖