Паттерн спичечного рукава определен как
Syntax
Pattern :
LiteralPattern
| IdentifierPattern
| WildcardPattern
| RangePattern
| ReferencePattern
| StructPattern
| TupleStructPattern
| TuplePattern
| GroupedPattern
| SlicePattern
| PathPattern
| MacroInvocation
Он либо постоянный (включая буквальный), либо структурный, а не вычисляемый. Значение, определенное как list[0]
, не соответствует ни одному из этих определений.
К счастью, спичечная рука может также содержать охранное выражение , которое допускает это:
let x = 1;
let list = vec![1, 2];
match x {
_ if x == list[0] => println!("one"),
_ if x == list[1] => println!("two"),
_ => println!("something else")
}
Использование if else
было бы более чистым, хотя (или другой структурой, если у вас есть больше случаев, таких как карта или индекс).