[英]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.