我打电话给env::vars_os
,并希望以功能方式打印所有这些内容:
env::vars_os()
.map(|(k, v)| println!("k : {:?}, v : {:?} \n", k, v));
这没有打印,但文章Destructuring and Pattern Matching表明这应该是可能的。
答案 0 :(得分:2)
查看documentation for vars_os()
,我们看到它是元组的迭代器,其语法为(a, b)
。所以,将代码更改为
env::vars_os()
.map(|(k, v)| println!("k : {:?}, v : {:?} \n", k, v));
应该这样做。
您正在使用的语法将结构化为结构,只有您省略了结构的名称,该名称将位于大括号之前。
Rust中的迭代器被懒惰地评估,这意味着在消耗迭代器之前,map
中的所有代码都不会被执行。您可以致电collect()
来完成此操作。但是,这样做的惯用方法是将具有副作用(例如打印)的代码放在for
循环而不是map
中:
for (k, v) in env::vars_os() {
println!("k : {:?}, v : {:?} \n", k, v);
}