【发布时间】:2019-06-20 18:22:13
【问题描述】:
假设我想将数字迭代器中的每个值加倍。我可以这样做:
vec![1, 2, 3]
.into_iter()
.map(|x| x * 2)
.for_each(|x| println!("{}", x)); //Prints 2, 4, 6.
为了获得更简洁的代码,我更愿意这样做:
vec![1, 2, 3]
.into_iter()
.double() //I need to implement this.
.for_each(|x| println!("{}", x));
如何编写自己的可链接迭代器函数,例如本例中的double?我想我将不得不创建一个接口并为 Iterator 实现它?有很多类型需要正确处理,所以为这个愚蠢的例子提供一个可行的解决方案会很有帮助。
【问题讨论】:
-
这是一件值得学习的好东西,但我认为在这种特殊情况下这并不是“更干净”。它会引入很多代码,与按预期使用
map相比,这些代码并不是真正必要的。 -
@E4_net_or_something_like_that 感谢您的链接。我同意在这个简单的情况下它并不干净,但我需要一个简单的例子,以免问题变得广泛。