- 一致項目としてアンダースコアがなければ、 "なし" のすべてをキャッチしません、それは代わりにアンダースコアを使用することができますか?
この場合、はいです。 Option<T>
の場合は、Some<T>
またはNone
の2つしかありません。 すでにのすべての値が一致していますので、が残っています。 None
は、_
とまったく同じように動作します。
2.構造体を戻り値として使用せずに、このような関数でエラーを返すことはできますか?
私はあなたがエラーを処理するためにすべての可能な方法を理解するために、この詳細なガイドを読んでお勧めしたい - http://static.rust-lang.org/doc/master/tutorial-conditions.html
オプションおよび結果を用いて構造体を返すために、あなたが必要になります。
3.一般に、「マッチ」を使用して不一致が発生する可能性はありますか?その場合はどうなりますか?
すべての可能なケースが処理されることを保証できない場合、錆はmatch
をコンパイルしません。すべての可能性にマッチしない場合は、_
句が必要です。
4.下の例では、アンダースコアの使用と「なし」の使用に違いはありますか?
いいえ#1を参照してください。
// 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!")
おかげで、ここで
は、あなたがあなたの関数を書くことができる多くの方法の3です。私は与えられた例を試してみる。 –