我正在尝试改善对match
表达式的使用。
我有如下代码,其中foo
是一个字符串:
if foo.chars().nth(0).unwrap() != '2' &&
foo.chars().nth(0).unwrap() != '3' &&
&foo[0..3] != "xyz"
{
return message;
}
是否可以使用match创建相同的行为? 像这样的想法:
match foo {
&[0] == (2 | 3) => do_nothing
&[0..3] == "xyz" => do_nothing
_ => return message;
}
答案 0 :(得分:5)
您的方法存在几个问题:
foo[0]
,而在某些其他分支中无法匹配foo[0..3]
。因此,让我们选择最大范围:foo[0..3]
。&foo.as_bytes()[0..3]
。match &foo.as_bytes()[0..3] {
&[b'2', ..] | &[b'3', ..] => do_nothing(),
b"xyz" => do_nothing(),
_ => return message,
}
有一个proposal to make |
a regular pattern而不是match
的特殊构造,它将使第一个分支可表示为&[2 | 3, ..]