如何在匹配臂中使用表达式?我想处理100
等于的情况75 + 25
。
fn main() {
match 100 {
75 + 25 => println!("100"),
// ^ expected one of `...`, `..=`, `..`, `=>`, `if`, or `|`
_ => unreachable!()
};
}
目前,如果不使用 nightly 编译器上的不稳定功能,您将无法做到这一点。
你可以写的是:
fn main() {
const A: i32 = 75 + 25;
match 100 {
A => println!("100"),
_ => unreachable!()
};
}
或作为@Ry评论,您可以使用警卫:
fn main() {
match 100 {
x if x == 75 + 25 => println!("100"),
_ => unreachable!()
};
}
但是,如果我将一个复杂的表达式放在保护中并且它位于性能关键区域中,我会小心检查编译器是否正确地将其提取为常量。(如果您将自己限制在 const 函数中应该没问题...)
支持您想要的功能的新功能被称为并在此处inline-const
进行跟踪,您可以在此处找到一些详细信息。如果您愿意在 nightly 编译器上使用不稳定的功能,那么您现在可以这样做:
#![feature(inline_const)]
fn main() {
match 100 {
const {75 + 25} => println!("100"),
_ => unreachable!()
};
}
当/如果它变得稳定时,您可以删除该feature
线,这将启用不稳定的功能。