如何在匹配中使用表达式作为条件?
How to use expression as condition in match?
如何在匹配臂中使用表达式?我想处理 100
等于 75 + 25
.
的情况
fn main() {
match 100 {
75 + 25 => println!("100"),
// ^ expected one of `...`, `..=`, `..`, `=>`, `if`, or `|`
_ => unreachable!()
};
}
目前,如果不在夜间编译器上使用不稳定的功能,则无法执行此操作。
你可以写的是:
fn main() {
const A: i32 = 75 + 25;
match 100 {
A => println!("100"),
_ => unreachable!()
};
}
或作为 评论,您可以使用守卫:
fn main() {
match 100 {
x if x == 75 + 25 => println!("100"),
_ => unreachable!()
};
}
但是,如果我在守卫中放置一个复杂的表达式并且它位于性能关键区域,我会小心检查编译器是否正确地将它提取为常量。 (如果你限制自己使用常量函数应该没问题......)
一项支持您想要的东西的新功能称为 inline-const
,正在跟踪 here, and you can find some details here。如果您愿意在夜间编译器上使用不稳定的功能,那么您现在可以这样做:
#![feature(inline_const)]
fn main() {
match 100 {
const {75 + 25} => println!("100"),
_ => unreachable!()
};
}
When/if 它变得稳定您可以删除 feature
行,这会启用不稳定的功能。
如何在匹配臂中使用表达式?我想处理 100
等于 75 + 25
.
fn main() {
match 100 {
75 + 25 => println!("100"),
// ^ expected one of `...`, `..=`, `..`, `=>`, `if`, or `|`
_ => unreachable!()
};
}
目前,如果不在夜间编译器上使用不稳定的功能,则无法执行此操作。
你可以写的是:
fn main() {
const A: i32 = 75 + 25;
match 100 {
A => println!("100"),
_ => unreachable!()
};
}
或作为
fn main() {
match 100 {
x if x == 75 + 25 => println!("100"),
_ => unreachable!()
};
}
但是,如果我在守卫中放置一个复杂的表达式并且它位于性能关键区域,我会小心检查编译器是否正确地将它提取为常量。 (如果你限制自己使用常量函数应该没问题......)
一项支持您想要的东西的新功能称为 inline-const
,正在跟踪 here, and you can find some details here。如果您愿意在夜间编译器上使用不稳定的功能,那么您现在可以这样做:
#![feature(inline_const)]
fn main() {
match 100 {
const {75 + 25} => println!("100"),
_ => unreachable!()
};
}
When/if 它变得稳定您可以删除 feature
行,这会启用不稳定的功能。