私はRustで書いた簡単な関数にコマンドライン引数を渡して欲しい。私はint::from_str(args[1])
を使用して変換することができますが、これはOption<int>
を返します。これは、を受け取る関数に渡すために、私はmatch
ステートメントを使用する必要があります。しかし、n引数では、2^nの可能性があります。一連のネストされたmatch
ステートメントを何かに書くことはひどいことになります。ブール値で錆の列挙型をチェックしますか?
// will return either Some(int) or None
let start = int::from_str(args[1]), end = int::from_str(args[2]);
if typeof(start) == Some && typeof(end) == Some {
println(fmt!("You entered: %d, %d", start, end);
} else {
println("Error with arguments.");
}
このような方法はありますか?これにより、en30のメンバーがmatch
以外であるかどうかテストできますか?列挙型の
ああ、私はあなたが試合で複数の議論を行うことができないことを知りました。それは素晴らしいことです。私は 'is_some()'メソッドなどを明示的に書く必要があります。 –
@limp_chimp、correct、標準ライブラリの 'Option'に' .is_some() 'が定義されています。独自の列挙型を定義すると、自動的にそのようなメソッドはありません。 – huon
@limp_chimp:実際に 'is_some'の実装を見ると'!self.is_none() 'となり、' match * self {None => true、Some(_)=> false} 'となります。 (しかし、余分なメソッド呼び出しのための完全なヒットのための恐れはありません;これらはすべて '#[inline]'とマークされています)。 –