2017-07-06 13 views
1

私はenv::vars_osへの呼び出しを持っており、機能的な方法でそれらのすべてを印刷したいと思います:クロージャで複数の引数を取って印刷するにはどうすればよいですか?

env::vars_os() 
    .map(|(k, v)| println!("k : {:?}, v : {:?} \n", k, v)); 

これは何も出力しませんが、記事Destructuring and Pattern Matchingはこれが可能でなければなりません示しています。

+2

「警告:使用する必要があり、未使用の結果:イテレータアダプタ怠け者で、消費しない限り何もしません。 " – ljedrz

答えて

2

documentation for vars_os()を見ると、タプルの反復子であり、構文は(a, b)です。したがって、コードを

env::vars_os() 
    .map(|(k, v)| println!("k : {:?}, v : {:?} \n", k, v)); 

に変更する必要があります。

使用している構文は構造体に分解されますが、構造体の名前は中括弧の前にありません。 Rustの


イテレータはレイジー反復子が消費されるまでmapのコードのいずれも実行されないことを意味する、評価されます。これを行うにはcollect()を呼び出します。しかし、それを行うための慣用的な方法ではなくmapforループ内(印刷など)の副作用を持っているコードを配置するために、次のようになります。

for (k, v) in env::vars_os() { 
    println!("k : {:?}, v : {:?} \n", k, v); 
} 
+0

私はこのページにある例を見てこれを発見し、それに応じて私の質問を変更しました。しかしこれをしても何も印刷されませんか? – duck

+0

私はそれに対処するために私の答えを編集しました。 – paholg

+0

ありがとうございます。私はこの答えを正しいとマークし、より正確に質問を反映するようにタイトルを変更します – duck

関連する問題