2 回答

TA贡献1784条经验 获得超7个赞
Rust编程语言解释了如何match处理表达式,重点是:
当match表达式执行时,它会按顺序将结果值与每个手臂的模式进行比较。
在您的示例中,max_column是要绑定的变量的名称,而不是常量或外部变量。当编译器到达时max_column,所有剩余的值都将分配给该匹配臂,从而使后续的臂不可用。
就您而言,您需要一名比赛后卫:
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并且_是同样的事情在这种情况下!在这两种情况下,匹配的变量都将绑定到一个名称(a或_分别绑定),但是任何带前缀的标识符_都是特殊情况,以用作未使用的变量占位符。
bluss澄清并纠正了这种近似:
_是一个单独的特殊情况,它根本不是变量绑定,但是没有一个!匹配_x将值移入_x,_则不会这样。(差异是可以观察到的。)

TA贡献1878条经验 获得超4个赞
另一种选择是,x => /* the default case, using x */
当x
在任何可见范围内引入名称时,匹配臂不再成为默认情况。这是不一致的,对我来说,也是违反直觉的。
- 2 回答
- 0 关注
- 357 浏览
添加回答
举报