【发布时间】:2018-09-21 22:23:21
【问题描述】:
考虑一下:
loop {
let data = match something() {
Err(err) => {
warn!("An error: {}; skipped.", err);
continue;
},
Ok(x) => x
};
let data2 = match something_else() {
Err(err) => {
warn!("An error: {}; skipped.", err);
continue;
},
Ok(x) => x
};
// and so on
}
如果我不需要将 ok 值分配给 data,我会使用 if let Err(err) = something(),但是上面的代码是否有一个快捷方式可以避免复制粘贴 Err/Ok 分支我认为这是典型的场景? if let 之类的东西也会返回 ok 值。
【问题讨论】:
-
你可以去掉
let data和continue,然后把“其他东西”放在Ok(x) =>的情况下。 -
@sepp2k 是的,但是当循环中有多个结果操作时,这将很快变成大量嵌套代码。写一个宏会是一种出路吗?
-
“避免在此复制粘贴 Err/Ok 分支”这里复制粘贴的是什么?
-
你错过了像
Result这样的结构点,这个强制代码检查错误,如果有什么可以绕过这个,那有什么意义?这种结构在 Rust 中非常常见,以至于使用?来避免代码复制。对于仅测试或在主函数中,您可以使用.unwrap()或.expect()
标签: loops rust pattern-matching control-flow