- マッチアイテムとしてアンダースコアがない場合、「なし」はすべてをキャッチしますか?アンダースコアの代わりに使用できますか?
この場合、はい。Option<T>
:Some<T>
またはの場合は 2 つしかありませんNone
。Some
すでにすべての値の大文字と小文字が一致しておりNone
、残っている唯一の大文字と小文字であるため、
None
とまったく同じように動作し_
ます。
2.戻り値として構造体を使用せずに、このような関数でエラーを返すことは可能ですか?
エラーを処理するすべての可能な方法を理解するために、この詳細なガイドを読むことをお勧めします -
http://static.rust-lang.org/doc/master/tutorial-conditions.html
Options と Results を使用するには、構造体を返す必要があります。
3. 一般的に、「一致」を使用して不一致が発生する可能性はありますか? その場合はどうなりますか?
match
可能なすべてのケースが処理されることを保証できない場合、Rust は a をコンパイルしません。_
すべての可能性に一致しない場合は、句が必要です。
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!")