如何使用表达式作为匹配条件?

Gir*_*rpa 2 match rust

如何在匹配臂中使用表达式?100我想处理等于 的情况75 + 25

fn main() {
    match 100 {
        75 + 25 => println!("100"),
//         ^ expected one of `...`, `..=`, `..`, `=>`, `if`, or `|`
        _ => unreachable!()
    };
}
Run Code Online (Sandbox Code Playgroud)

Mic*_*son 6

目前,如果不使用夜间编译器上的不稳定功能,则无法执行此操作。

你可以写的是:

fn main() {
    const A: i32 = 75 + 25;
    match 100 {
        A => println!("100"),
        _ => unreachable!()
    };
}
Run Code Online (Sandbox Code Playgroud)

或者作为@Ry评论,你可以使用守卫:

fn main() {
    match 100 {
        x if x == 75 + 25 => println!("100"),
        _ => unreachable!()
    };
}
Run Code Online (Sandbox Code Playgroud)

但是,如果我在保护中放置一个复杂的表达式,并且它位于性能关键区域,我会小心检查编译器是否正确地将其提取为常量。(如果你将自己限制在常量函数上应该没问题......)

一个支持您想要的功能的新功能被称为并正在此处inline-const跟踪,您可以在此处找到一些详细信息。如果您愿意在夜间编译器上使用不稳定的功能,那么您现在可以这样做:

#![feature(inline_const)]
fn main() {
    match 100 {
        const {75 + 25} => println!("100"),
        _ => unreachable!()
    };
}
Run Code Online (Sandbox Code Playgroud)

当/如果它变得稳定时,您可以删除该feature线,从而启用不稳定功能。