我正在努力改进我的match表达方式。
我有一个类似下面的代码,其中foo是一个字符串:
if foo.chars().nth(0).unwrap() != '2' &&
foo.chars().nth(0).unwrap() != '3' &&
&foo[0..3] != "xyz"
{
return message;
}
Run Code Online (Sandbox Code Playgroud)
是否可以使用匹配来创建相同的行为?像这样的想法:
match foo {
&[0] == (2 | 3) => do_nothing
&[0..3] == "xyz" => do_nothing
_ => return message;
}
Run Code Online (Sandbox Code Playgroud)
你的方法有几个问题:
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,
}
Run Code Online (Sandbox Code Playgroud)
有一个建议是创建|一个常规模式而不是 的特殊构造match,这将使第一个分支可以表示为&[2 | 3, ..]