if let

2018-08-12 22:03 更新

If let

If let 允許你把 if 和 let 結(jié)合到一起,來(lái)減少某些類(lèi)型的模式匹配所需的開(kāi)銷(xiāo)。

例如,有某種 Option<T>。如果它是 Some<T>,我們希望在它上面調(diào)用一個(gè)函數(shù),如果不是,則什么也不做。就像下面這樣:

match option {
Some(x) => { foo(x) },
None => {},
}

在這里我們不一定非要使用匹配,例如,我們可以使用 if

if option.is_some() {
let x = option.unwrap();
foo(x);
}

這些選項(xiàng)都不是特別有吸引力。我們可以用 if let 語(yǔ)句以更好的方式做同樣的事情:

if let Some(x) = option {
foo(x);
}

如果一個(gè)模式匹配成功,它將給模式的標(biāo)識(shí)符綁定任意合適的值,然后評(píng)估表達(dá)式。如果模式不匹配,則什么也不去做。

當(dāng)模式不匹配時(shí),如果你希望去做別的事情,您可以使用 else:

if let Some(x) = option {
foo(x);
} else {
bar();
}
while let

以類(lèi)似的方式,當(dāng)一個(gè)值匹配某種模式時(shí),你可以用 while let 來(lái)進(jìn)行條件循環(huán)。代碼如下面所示:

loop {
match option {
Some(x) => println!("{}", x),
_ => break,
}
}

轉(zhuǎn)換成下面這樣的代碼:

while let Some(x) = option {
println!("{}", x);
}
以上內(nèi)容是否對(duì)您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)