如何Iterator ::链接迭代器的向量?

ife*_*ett 7 rust

对于给定的迭代器集a,b,c,可以成功地将它们链接起来a.chain(b).chain(c).由于我试图编写的CLI util提供了一个路径向量(字符串, - dirs"a/b/c""d/e/f"...),我想walkd_dir在每个上使用然后将它们连在一起.我的第一个想法是:

fn main() {
    let a = 0..3;
    let b = 3..6;
    let c = 6..9;
    let v = vec![b, c];
    v.iter().cloned().fold(a, |acc, e| acc.chain(e));
}
Run Code Online (Sandbox Code Playgroud)

http://is.gd/hfNQd2,返回

<anon>:6:40: 6:52 error: mismatched types:
 expected `core::ops::Range<_>`,
    found `core::iter::Chain<core::ops::Range<_>, core::ops::Range<_>>`
(expected struct `core::ops::Range`,
    found struct `core::iter::Chain`) [E0308]
<anon>:6     v.iter().cloned().fold(a, |acc, e| acc.chain(e));
Run Code Online (Sandbox Code Playgroud)

另一个尝试http://is.gd/ZKdxZM,虽然a.chain(b).chain(c)有效.

blu*_*uss 9

用途flat_map:

fn main() {
    let a = 0..3;
    let b = 3..6;
    let c = 6..9;
    let v = vec![a, b, c];
    v.iter().flat_map(|it| it.clone());
}
Run Code Online (Sandbox Code Playgroud)