繁体   English   中英

将模式匹配转换为选项的最易读的方法是什么?

[英]What's the most readable way to turn a pattern match into an Option?

在处理具有嵌套枚举的复杂结构时,我经常发现自己编写辅助方法来选择特定分支:

impl MyEnum {
    fn as_foo(&self) -> Option<&Foo> {
        if let Self::Foo(foo) = self { Some(foo) } else { None }
    }
}

哪些链使用起来很方便? 操作员。 它们也可以通过盒子和其他智能指针透明地使用,这不是嵌套模式的情况(至少在 RFC2099/MCP77 成为现实之前?)。

不幸的是,这里的语法非常多余和麻烦。 怎样才能做得更好?

我可以使用类似下面的宏:

macro_rules! some_match {
    ($p:pat = $e:expr => $r:expr) => { if let $p = $e { Some($r) } else { None } }
}
fn as_foo(&self) -> Option<&Foo> {
    some_match!(MyEnum::Foo(p) = self => p)
}

但我更喜欢来自标准库的解决方案,这对读者来说不会那么令人惊讶。

我不知道任何std解决方案,但有各种板条箱可以帮助您:

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM