Rust 是否有一种评估可反驳模式是否匹配的简写方法?
据我所知,可反驳模式只能在Rust 是否有一种评估可反驳模式是否匹配的简写方法?,rust,pattern-matching,Rust,Pattern Matching,据我所知,可反驳模式只能在match、if let和while let表达式中进行测试。为了说明我想做什么,请考虑以下上下文中匹配语句中使用的=/COD>语法: let val=get_可选_值(); 如果val=>Some(内部){ 做点什么(内心); } 我可以使用if let语句,但更有用的上下文是简短的闭包: get_可选_值() .filter(|iv | iv=>InnerVariant::VariantA) .然后(/*…*/) 据我所知,使用模式匹配实现这一目标的唯一解决方案
match
、if let
和while let
表达式中进行测试。为了说明我想做什么,请考虑以下上下文中匹配语句中使用的<代码>=/COD>语法:
let val=get_可选_值();
如果val=>Some(内部){
做点什么(内心);
}
我可以使用if let
语句,但更有用的上下文是简短的闭包:
get_可选_值()
.filter(|iv | iv=>InnerVariant::VariantA)
.然后(/*…*/)
据我所知,使用模式匹配实现这一目标的唯一解决方案是:
get_可选_值()
.过滤器(| iv |{
如果让InnerVariant::Variata=iv{
真的
}否则{
假的
}
})
.然后(/*…*/)
有一个问题没有得到回答,但注释确实指向使用了?
运算符,该运算符解决了添加宏的std::result::result
X
是否与模式Y
匹配
在您的情况下,可以这样使用:
get_可选_值()
.filter(| iv |匹配!(iv,InnerVariant::VariantA))
.然后(/*…*/)
这不允许您绑定新名称,您只能在可选的
if
保护中访问“内部”数据。我猜您的意思是:.filter(|iv | matches!(iv,InnerVariant::VariantA))
对吗?是的,复制粘贴错误:)我在您的示例中没有看到用例。您在中会做什么?然后
?因为你需要再次匹配你的变体。我认为这里有一些用例,但是这个例子中的和_then
更能说明,如果你有一系列采用闭包的方法,这将变得非常冗长。很难在一篇文章中回答多个问题。请将这些问题分成多个问题,以便我们能够更好地帮助您,并且您的问题将在将来帮助与您有相同问题的其他人!我删除了不相关的问题。是的,我正在考虑删除这一部分,并将其放在自己的问题中。。。谢谢