Ich möchte, dies schreiben:Rückkehr eine einfachere Iterator-Schnittstelle statt einer Karte in Rust
fn fibs() -> std::iter::Iterator<int> {
return std::iter::iterate((1i, 1i), |(a, b)| { (b, a + b) }).map(|(a, _)| a)
}
Aber wenn ich es tue, bekomme ich diesen Fehler:
error: explicit lifetime bound required
fn fibs() -> std::iter::Iterator<int> {
^^^^^^^^^^^^^^^^^^^^^^^^
Wenn stattdessen I schreibe die vollständige Schnittstelle aus, es kompiliert:
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)
}
Gibt es eine Möglichkeit, die einfachere Schnittstelle zurückzugeben?
Iterator ist ein Merkmal und kein Typ. Ich weiß nicht viel über Rust, aber ich denke, du musst es in Box packen. Um ungepackte abstrakte Typen zurückzugeben, benötigen wir diese: https://github.com/rust-lang/rfcs/pull/105 – Simon