2 回答

TA貢獻1786條經驗 獲得超13個贊
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貢獻1789條經驗 獲得超8個贊
另一種選擇是,x => /* the default case, using x */
當x
在任何可見范圍內引入名稱時,匹配臂不再成為默認情況。這是不一致的,對我來說,也是違反直覺的。
- 2 回答
- 0 關注
- 453 瀏覽
添加回答
舉報