Warum kann ich nicht push
zu diesem Vektor während inspect
und tun contains
darauf während skip_while
?Rust Inspect Iterator: kann `*` nicht als unveränderlich ausleihen, weil es auch als veränderbar geliehen wird
struct Chain {
n: u32,
}
impl Chain {
fn new(start: u32) -> Chain {
Chain { n: start }
}
}
impl Iterator for Chain {
type Item = u32;
fn next(&mut self) -> Option<u32> {
self.n = digit_factorial_sum(self.n);
Some(self.n)
}
}
Nun, was ich es take
tun mag, während der Iterator eindeutige Werte produziert:
Ich habe meinen eigenen Iterator für meine eigene Struktur Chain
wie diese umgesetzt werden. So bin ich inspect
die Kette -ing und auf einen Vektor schieben und sie dann in einem take_while
Umfang Überprüfung:
let mut v = Vec::with_capacity(terms);
Chain::new(i)
.inspect(|&x| {
v.push(x)
})
.skip_while(|&x| {
return v.contains(&x);
})
jedoch spuckt die Rust Kompilierung aus diesem Fehler:
error: cannot borrow `v` as immutable because it is also borrowed as mutable [E0502]
...
borrow occurs due to use of `v` in closure
return v.contains(&x);
^
previous borrow of `v` occurs here due to use in closure; the mutable borrow prevents subsequent moves, borrows, or modification of `v` until the borrow ends
.inspect(|&x| {
v.push(x)
})
Offensichtlich I don verstehe das Konzept des "Ausleihens" nicht. Was mache ich falsch?
Wahrscheinlich hat das Problem damit zu tun, dass Sie versuchen, eine Variable zu schließen, die sich irgendwo in einem anderen Bereich ('v') befindet. Das ist in Rust sehr wichtig. Daher müssen wir sehen, woher 'v' kommt, wie es deklariert wurde und wie Sie es im aktuellen Bereich referenzieren. –
@SimonWithehead bearbeitet, um 'v' einzuschließen. Ich muss es schon früher weggelassen haben. – alt