返回一个更简单的Iterator接口而不是Rust中的Map

Jam*_*dle 6 rust

我想写这个:

fn fibs() -> std::iter::Iterator<int> {
    return std::iter::iterate((1i, 1i), |(a, b)| { (b, a + b) }).map(|(a, _)| a)
}
Run Code Online (Sandbox Code Playgroud)

但如果我这样做,我会收到此错误:

error: explicit lifetime bound required
fn fibs() -> std::iter::Iterator<int> {
             ^^^^^^^^^^^^^^^^^^^^^^^^
Run Code Online (Sandbox Code Playgroud)

如果我写出完整的界面,它编译:

fn fibs() -> std::iter::Map<'static, (int, int), int, std::iter::Iterate<'static, (int, int)>> {
    return std::iter::iterate((1i, 1i), |(a, b)| { (b, a + b) }).map(|(a, _)| a)
}
Run Code Online (Sandbox Code Playgroud)

有没有办法返回更简单的界面?

Chr*_*gan 6

目前还没有任何方法可以返回抽象类型Iterator<T>,就像你不能将它指定为变量的类型一样(let x: Iterator<uint>;由于相同的原因不会编译).

已经讨论过,当然也是需要的; 什么时候它可能会在形式fn fibs() -> impl Iterator<uint>,但你不能这样做.