如何在闭包中使用多个参数并打印它们?

时间:2017-07-06 07:41:36

标签: functional-programming rust closures

我打电话给env::vars_os,并希望以功能方式打印所有这些内容:

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

这没有打印,但文章Destructuring and Pattern Matching表明这应该是可能的。

1 个答案:

答案 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);
}