此问题已在此处有答案:
How can I store a pattern in a variable in Rust?(1个答案)
3年前关闭。
这个方法的作用是:
match 0 {
0..=9 => (),
_ => (),
}
但这不是:
const R: std::ops::RangeInclusive<u8> = 0..=9;
fn main() {
match 0 {
R => (),
_ => (),
}
}
playground。
如果我想使用一个范围与match
,我必须使用一个文字范围?
1条答案
按热度按时间bvjxkvbb1#
我认为问题在于,当你
match
和u8
时,每个匹配臂必须提供u8
类型的值,以便与参数进行比较。现在,如果你写
0..=9
,这不是RangeInclusive
(即使看起来一样)-它是一个 *range模式 *,可以用来描述匹配臂中的值范围。所以,如果你在match arm中编写
R => ()
,编译器会抱怨(imo是正确的):也就是说,它期望一个
u8
(或者,隐式地,u8
值的范围模式),但它找到了一个RangeInclusive
。现在,一个可能的解决方案是将下限和上限定义为单独的常数:
另一个,在我看来不太吸引人,将是一个宏,只是扩大到您的范围: