- 沒有下劃線作爲一個匹配的項目,將 「無」 捕獲所有,並可以將其用來代替下劃線?
在這種情況下,是的。 Option<T>
只有2種情況:Some<T>
或None
。 您已經匹配所有值的Some
個案,None
是唯一剩下的案例,因此 None
的行爲與_
的行爲完全相同。
2.是否可以在不使用結構體作爲返回值的情況下返回類似這樣的函數中的錯誤?
我建議你閱讀這篇詳細的指南,瞭解所有可能的方式來處理錯誤 - http://static.rust-lang.org/doc/master/tutorial-conditions.html
使用選項和結果會要求你返回一個結構。
3.一般情況下,使用「匹配」是否可能出現不匹配,如果是,會發生什麼?
如果Rust無法保證處理所有可能的情況,Rust將不編譯match
。如果您不符合所有可能性,則需要有_
條款。
4.在下面的例子中,使用下劃線和使用「無」之間是否有區別?
否參見答案#1。
以下是你可以寫你的函數的許多方法3:
// Returns -1 on wrong input.
fn alt_1(s: &str) -> i64 {
match from_str::<i64>(s) {
Some(i) => if i >= 0 {
i
} else {
-1
},
None => -1
}
}
// Returns None on invalid input.
fn alt_2(s: &str) -> Option<i64> {
match from_str::<i64>(s) {
Some(i) => if i >= 0 {
Some(i)
} else {
None
},
None => None
}
}
// Returns a nice message describing the problem with the input, if any.
fn alt_3(s: &str) -> Result<i64, ~str> {
match from_str::<i64>(s) {
Some(i) => if i >= 0 {
Ok(i)
} else {
Err(~"It's less than 0!")
},
None => Err(~"It's not even a valid integer!")
}
}
fn main() {
println!("{:?}", alt_1("123"));
println!("{:?}", alt_1("-123"));
println!("{:?}", alt_1("abc"));
println!("{:?}", alt_2("123"));
println!("{:?}", alt_2("-123"));
println!("{:?}", alt_2("abc"));
println!("{:?}", alt_3("123"));
println!("{:?}", alt_3("-123"));
println!("{:?}", alt_3("abc"));
}
輸出:
123i64
-1i64
-1i64
Some(123i64)
None
None
Ok(123i64)
Err(~"It's less than 0!")
Err(~"It's not even a valid integer!")
謝謝,這看起來非常的說明。我會嘗試給出的例子。 –