是否可以在 Rust 的 match 语句中包含现有变量?

Gir*_*Key 0 pattern-matching rust

例如,在 Elixir 的case 语句中,以下代码是有效的,并且将匹配 10 到 1:

x = 1
case 10 do
    ^x -> "Won't match"
    _ -> "Will match"
end
Run Code Online (Sandbox Code Playgroud)

然而,在 Rust 中,^ 不是此用例的有效运算符。它只是给出一个错误,显示类似“预期模式,找到 ^”之类的内容。我尝试这样做:

let x = 1;
match 10 {
    x => "Won't match",
    _ => "Will match",
}
Run Code Online (Sandbox Code Playgroud)

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

kfe*_*v91 5

对于这种情况,您可以使用比赛护臂。将匹配文字绑定到其他变量,例如y,然后签y == x入守卫。例子:

fn main() {
    let x = 1;
    let result = match 10 {
        y if y == x => "10 matched x value",
        _ => "10 didn't match x value",
    };
    println!("{}", result); // 10 didn't match x value
}
Run Code Online (Sandbox Code Playgroud)

操场