我有一个迭代器,我想在最终调用之前有条件地应用过滤器、跳过等collect()
。
用另一种语言,我可能会写类似
// (Rust-like pseudocode)
let mut iter = [1,2,3,4].iter();
if should_filter {
iter = iter.filter(|x| x % 2 == 0);
}
if should_truncate {
iter = iter.take(2);
}
iter.collect()
但由于iter
is 类型Iter
, 和skip()
,filter()
返回类型Skip
, Filter
, 我一直无法重用iter
. 结果,我的 Rust 代码目前看起来像这样:
let iter = [1,2,3,4].iter();
// conditionally filter
if should_filter {
let iter = iter.filter(|x| x % 2 == 0);
// conditionally "truncate"
if should_truncate {
let iter = iter.take(2);
return iter.collect();
}
return iter.collect();
}
// conditionally "truncate"
if should_truncate {
let iter = iter.take(2);
return iter.collect();
}
iter.collect()
有什么办法可以避免这种重复?