イテレータのアイテムに対して最も慣れ親しんだ方法は何ですか?たとえば、コマンドライン引数を使用する場合、項目の1つでパターンマッチングを使用する最良の方法は何ですか?イテレータのアイテムとのマッチング方法は?
let args: Vec<String> = env::args().skip(1).collect();
match args[0].as_ref() {...}
イテレータのアイテムに対して最も慣れ親しんだ方法は何ですか?たとえば、コマンドライン引数を使用する場合、項目の1つでパターンマッチングを使用する最良の方法は何ですか?イテレータのアイテムとのマッチング方法は?
let args: Vec<String> = env::args().skip(1).collect();
match args[0].as_ref() {...}
env::args()
はイテレータ(Args
)を返すので、あなたと同じように操作することができます:これは私がやっているとas_ref()
が必要とされ、なぜ&args[0]
が動作しない理由を、私は100%わからないものです他のイテレータ。あなたが一度与えられたアイテムに対して一致させたい場合は、それは次のようになり最も簡単な方法:文字列に対して一致するので
use std::env;
fn main() {
let mut args = env::args().skip(1);
match args.next() {
Some(x) => {
if &x == "herp derp" { ... }
},
None =>()
}
}
はすでにルスト文字列リテラルに対して文字列に一致する方法[例えば(過去に答えたのですか? ](https://stackoverflow.com/questions/25383488/how-to-match-a-string-against-string-literals-in-rust))、私はプログラムの議論や、より一般的には、イテレータのアイテム。 – ljedrz
ありがとう、そのリンクは私が実際にas_ref()について学んだところです。私はそれを使用し、それはうまく動作しますが、そのインデックス上のメソッドを呼び出す必要がある理由についてちょうど混乱していました。 –
パターンの 'String'が'&str'文字列スライスとして扱われ、 'match'ボディのスライスとマッチするように' as_ref() 'が必要です。 – ljedrz