我有一個代碼塊需要一次分配多個可選變量。幾乎沒有機會獲得任何值,因此單獨處理每個失敗的案例並不是特別有用。如何在Rust中對「選項」分配進行分組?
目前我寫的檢查是這樣的:
if let Some(a) = foo_a() {
if let Some(b) = foo_b() {
if let Some(c) = foo_c() {
if let Some(d) = foo_d() {
// code
}
}
}
}
這將是方便,如果有可能小組作業。沒有這一點,增加了新的變數縮進塊一個水平,使得在嘈雜的比較和導致不必要的深壓痕:
if let Some(a) = foo_a() &&
let Some(b) = foo_b() &&
let Some(c) = foo_c() &&
let Some(d) = foo_d()
{
// code
}
有if語句來分配多個Option
S IN一個辦法?
一些細節值得注意:
失敗應該短路,而不是叫別人第一個函數。否則,它可以被寫成這樣:
if let (Some(a), Some(b), Some(c), Some(d)) = (foo_a(), foo_b(), foo_c(), foo_d()) {
// Code
}
可以用一個功能避免深的壓痕,但我寧願不要這樣做,因爲你可能不希望擁有的身在不同的範圍...
fn my_function(a: Foo, b: Foo, c: Foo, d: Foo) {
// code
}
if let Some(a) = foo_a() {
if let Some(b) = foo_b() {
if let Some(c) = foo_c() {
if let Some(d) = foo_d() {
my_function(a, b, c, d);
}
}
}
}
我字面上大約爲[把這個作爲一個答案(HTTPS://play.rust-lang .org /?gist = 19b24cb31e915860916a99f41347b727&version = stable&backtrace = 0),直到我注意到包含短路的編輯。我不認爲它可能會短路多個'如果讓'綁定。 [但是有一個開放的RFC](https://github.com/rust-lang/rfcs/issues/929)。 –
@SimonWhitehead,非常感謝,並將其添加到問題中以供澄清 - 因爲在某些情況下它仍然可能非常方便。 – ideasman42