2 回答

TA貢獻(xiàn)1786條經(jīng)驗(yàn) 獲得超13個(gè)贊
Rust編程語(yǔ)言解釋了如何match處理表達(dá)式,重點(diǎn)是:
當(dāng)match表達(dá)式執(zhí)行時(shí),它會(huì)按順序?qū)⒔Y(jié)果值與每個(gè)手臂的模式進(jìn)行比較。
在您的示例中,max_column是要綁定的變量的名稱,而不是常量或外部變量。當(dāng)編譯器到達(dá)時(shí)max_column,所有剩余的值都將分配給該匹配臂,從而使后續(xù)的臂不可用。
就您而言,您需要一名比賽后衛(wèi):
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并且_是同樣的事情在這種情況下!在這兩種情況下,匹配的變量都將綁定到一個(gè)名稱(a或_分別綁定),但是任何帶前綴的標(biāo)識(shí)符_都是特殊情況,以用作未使用的變量占位符。
bluss澄清并糾正了這種近似:
_是一個(gè)單獨(dú)的特殊情況,它根本不是變量綁定,但是沒(méi)有一個(gè)!匹配_x將值移入_x,_則不會(huì)這樣。(差異是可以觀察到的。)

TA貢獻(xiàn)1789條經(jīng)驗(yàn) 獲得超8個(gè)贊
另一種選擇是,x => /* the default case, using x */
當(dāng)x
在任何可見(jiàn)范圍內(nèi)引入名稱時(shí),匹配臂不再成為默認(rèn)情況。這是不一致的,對(duì)我來(lái)說(shuō),也是違反直覺(jué)的。
- 2 回答
- 0 關(guān)注
- 462 瀏覽
添加回答
舉報(bào)