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)返回一个布尔值,指示表达式
X
是否与模式
Y
匹配

在您的情况下,可以这样使用:

get_可选_值()
.filter(| iv |匹配!(iv,InnerVariant::VariantA))
.然后(/*…*/)

这不允许您绑定新名称,您只能在可选的
if
保护中访问“内部”数据。

我猜您的意思是:
.filter(|iv | matches!(iv,InnerVariant::VariantA))
对吗?是的,复制粘贴错误:)我在您的示例中没有看到用例。您在
中会做什么?然后
?因为你需要再次匹配你的变体。我认为这里有一些用例,但是这个例子中的
和_then
更能说明,如果你有一系列采用闭包的方法,这将变得非常冗长。很难在一篇文章中回答多个问题。请将这些问题分成多个问题,以便我们能够更好地帮助您,并且您的问题将在将来帮助与您有相同问题的其他人!我删除了不相关的问题。是的,我正在考虑删除这一部分,并将其放在自己的问题中。。。谢谢