Ich versuche, einen Parser zu schreiben, der einen Iterator über einen Vektor an eine Funktion übergibt. Der Code ist ähnlich wie folgt aus:Wie schreibe ich den Typ eines Iterators, der an eine Funktion übergeben wird?
fn foo(itr : ???) {
while let Some(c) = itr.next() {
if *c != 0 {
break;
}
println!("{}", *c);
}
}
fn main() {
let v = vec![0; 10];
let itr = v.iter();
while let Some(c) = itr.next() {
foo(itr);
}
}
Ich bin nicht sicher, wie die Art des Iterator über den Vektor zu schreiben. Ich habe versucht, den falschen Typ u32
zu setzen, um zu sehen, welcher Typ rustc
erwartet: core::slice::Iter<'_, _>
. Wenn ich versuche, core::slice
rustc zu verwenden, klagt Use of undeclared type or module 'core::slice'
Super! Zu guter Letzt, wenn Sie sich gegenseitig rekursive Funktionen wie in einem rekursiven Descent-Parser haben, wird rost nicht kompiliert, wenn Sie Generika verwenden, aber wenn Sie ein Merkmal-Objekt verwenden, wird es funktionieren. –