4 个版本
0.1.4 | 2023年5月14日 |
---|---|
0.1.3 | 2023年1月28日 |
0.1.2 | 2023年1月27日 |
0.1.1 |
|
0.1.0 | 2023年1月27日 |
#19 in #utility-macro
在 spl 中使用
12KB
172 行
多调用
此库提供了 multicall!
宏,允许您对单个对象应用多个操作,而无需再次写入对象名称。
语法
let mut test_variable = 1;
multicall! {
expr:
operation;
set test_variable = operation;
exec normal_operation(#);
operation;
...
{
subexpr:
operation;
set test_variable += operation;
exec normal_operation(#);
operation;
...
}; // this semicolon is mandatory.
}
求值结果为
let mut test_variable = 1;
{
let __multicall_item__ = expr;
__multicall_item__.operation;
test_variable = __multicall_item__.operation;
normal_operation(__multicall_item__);
__multicall_item__.operation;
...
{
let __multicall_item__ = __multicall_item__.subexpr;
__multicall_item__.operation;
test_variable += __multicall_item__.operation;
normal_operation(__multicall_item__);
__multicall_item__.operation;
...
};
}
示例
use multicall::multicall;
use std::ops::AddAssign;
#[derive(Debug)]
struct Test { a: u32, b: i32 }
fn main() {
let mut test = Test { a: 0, b: 0 };
let b_plus_five;
multicall! {
&mut test:
a = 5;
b = 6;
{
b:
add_assign(500);
};
{
a:
add_assign(58);
};
a.add_assign(100 - 58);
set b_plus_five = b + 5;
exec println!("{}, {}", #.a, #.b);
}
println!("{test:?}");
}
更多示例在 examples/.
路线图
- 基本多调用语法
-
set
外部变量 -
exec
正常代码 - if 语句
- ... 可能更多