是否可以将现有变量包含在Rust';什么是匹配声明?

是否可以将现有变量包含在Rust';什么是匹配声明?,rust,pattern-matching,Rust,Pattern Matching,例如,在Elixir中,以下代码是有效的,并将与10:1匹配: x = 1 case 10 do ^x -> "Won't match" _ -> "Will match" end 但是,在Rust中,^不是此用例的有效运算符。它只是给出了一个类似“expected pattern,found^”的错误。我尝试过这样做: let x = 1; match 10 { x => "Won't match&q

例如,在Elixir中,以下代码是有效的,并将与10:1匹配:

x = 1
case 10 do
    ^x -> "Won't match"
    _ -> "Will match"
end
但是,在Rust中,^不是此用例的有效运算符。它只是给出了一个类似“expected pattern,found^”的错误。我尝试过这样做:

let x = 1;
match 10 {
    x => "Won't match",
    _ => "Will match",
}

但它将10绑定到x并返回“不匹配”(相当于“x”)。有没有一种方法可以动态地包含x,这样无论x是什么,它都会与其值相匹配?(注意:我知道我可以只使用if语句,但我很好奇match语句是否提供了解决方案)

在这种情况下,您可以使用match-arm-guard。将匹配文本绑定到其他变量,例如
y
,然后在保护中选中
y==x
。例如:

fn main(){
设x=1;
让结果=匹配10{
如果y==x=>“10个匹配的x值”,
_=>“10与x值不匹配”,
};
println!(“{}”,result);//10与x值不匹配
}

在这种情况下,您可以使用火柴护臂。将匹配文本绑定到其他变量,例如
y
,然后在保护中选中
y==x
。例如:

fn main(){
设x=1;
让结果=匹配10{
如果y==x=>“10个匹配的x值”,
_=>“10与x值不匹配”,
};
println!(“{}”,result);//10与x值不匹配
}

对于我们这些不熟悉长生不老药的人来说,
^
应该在那里做什么?我相信如果没有它,它会将一个值绑定到x,类似于生锈。它允许您在模式中插入case语句上面定义的x值。对于我们这些不熟悉Elixir的人来说,
^
应该在那里做什么?我相信没有它,它会将一个值绑定到x,类似于Rust。它允许您将case语句上方定义的x值插入到模式中。