为什么在使用非文字模式时,这种匹配模式无法访问?
下面的代码( 操场 )
let max_column = 7; edge = match current_column { 0 => Edge::Left, max_column => Edge::Right, _ => Edge::NotAnEdge };
导致以下错误:
error[E0001]: unreachable pattern --> <anon>:10:9 | 10 | _ => Edge::NotAnEdge | ^ this is an unreachable pattern | note: this pattern matches any value --> <anon>:9:9 | 9 | max_column => Edge::Right, | ^^^^^^^^^^
用文字replacevariablesmax_column
工作正常:
let max_column = 7; edge = match current_column { 0 => Edge::Left, 7 => Edge::Right, _ => Edge::NotAnEdge };
为什么在第一个例子中,当可以到达current_column != max_column
任何值时, _
不可达?
在你的例子中, max_column
是要绑定的variables的名称, 而不是常量或外部variables。 你想要一名比赛后卫 :
let current_column = 1; let max_column = 7; edge = match current_column { 0 => Edge::Left, a if a == max_column => Edge::Right, _ => Edge::NotAnEdge };
请注意, a
和_
实际上是一样的东西! 在这两种情况下,匹配的variables将被绑定到一个名字(分别a
或_
),但是任何带有_
前缀的标识符都是特殊的,用作一个未使用的variables占位符(见bluss'澄清/修正 )。