有没有可能匹配一个动态变量,而不仅仅是字面量?
在这段代码中,第一个match
应该和注解掉的match
一样(number[0]
是0
,number[1]
是1
):
const NUMBERS: [i8; 2] = [0, 1];
fn test() {
let current = 5;
let string = match current % 2 {
NUMBERS[0] => "even", // This does not work
NUMBERS[1] => "odd", // This does not work
_ => unreachable!(),
};
// let string = match current % 2 {
// 0 => "even",
// 1 => "odd",
// _ => unreachable!()
// };
}
字符串
4条答案
按热度按时间xcitsw881#
您可以使用 * 匹配后卫 *。
字符串
g6baxovj2#
在Rust中是否有可能匹配一个动态变量
不可以。顾名思义,* 模式匹配 * 基于 * 模式 *,而不是 * 表达式 * 或 * 值 。
你可以从the grammar看到这一点:一个 MatchArm 是 OuterAttribute Pattern MatchArmGuard?,而a pattern is an enumerated set of specific constructs。大部分是文字、标识符、路径和合并组合它们的方法(结构、元组、切片.模式)。
llycmphe3#
不管其他答案怎么说,你可以做你想做的事情,但是你需要为每种情况显式命名一个常量。
字符串
只有当你的表达式是
const
时,这才有效。非const
表达式不能在模式中使用。由于语法原因,中间的NUMBERS0
和NUMBERS1
常量是必要的。=>
的左边不是表达式,而是模式。有些模式看起来像表达式,但不是所有表达式都有模式外观。58wvjzkj4#
首先计算值,然后传递给
match
字符串