为什么在使用非文字模式时,这种匹配模式无法访问?

下面的代码( 操场 )

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'澄清/修正 )。