rust - 循环局部变量
问题描述
在 Rust 中,我有没有更简洁的方法来写这个?
for i in [&mut foo, &mut bar, &mut baz, &mut quux, &mut bob].iter_mut() {
i.handle_event(event)
}
上面的循环出现在我的函数的三个地方。foo
等bar
都是相同类型的可变局部变量。
let mut foo = MyType::new(...);
let mut bar = MyType::new(...);
...
我不想写let mut v = vec![foo, bar, baz, quuz, bob]
,因为向量会消耗变量。我还需要写诸如此类的bar.set_strength(10)
东西,而我不想写v[1].set_strength(10)
;如果我可以按名称引用每个代码,则代码会更清晰。
解决方案
我不确定这是否更清洁,但这是使用宏执行此操作的一种方法:
macro_rules! mut_loop {
($i:pat in [$($var:ident),*] $block:block) => {
for _mut_loop_var in [$(&mut $var),*].iter_mut() {
let $i = &mut **_mut_loop_var;
$block;
}
}
}
fn main() {
let mut foo = 0u32;
let mut bar = 0;
let mut baz = 0;
let mut quux = 0;
let mut bob = 0;
mut_loop!(i in [foo, bar, baz, quux, bob] {
*i += 5;
// i.handle_event(event)
});
}
推荐阅读
- python - 为什么这会给我 InvalidArgumentError?
- javascript - 使用 React 和 Redux 实现文本过滤的正确方法是什么?
- r - 如何计算 t.-statistic 值并使用 R 找到两侧 P 值?
- kubectl - 向基本 kubectl get pods 命令添加附加列
- elasticsearch - ELASTICSEARCH - 带有反斜杠的 Filter_path 查询
- vb.net - 对数据集行值求和 VB
- python - 获取Python中2个子字符串之间的所有可能字符串
- linux - vi vim 替换寄存器中的文本
- javascript - 如何让 jsdoc 使用 django 模板标签?
- reactjs - 如何反转雄蕊图中的调色剂层?