我调用了 env::vars_os
并希望以函数式方式打印所有这些:
env::vars_os()
.map(|(k, v)| println!("k : {:?}, v : {:?} \n", k, v));
这什么都不打印,但是文章 Destructuring and Pattern Matching表明这应该是可能的。
最佳答案
查看 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);
}
关于functional-programming - 如何在闭包中获取多个参数并打印它们?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44942644/