J'essaie d'obtenir un emprunt mutable dans une boucle, et je ne peux pas le faire fonctionner. J'ai essayé tous les gardes possibles, les pointeurs bruts, tout.Mutable emprunter dans la boucle
struct Test<'a> {
a: &'a str,
}
impl<'a> Test<'a> {
pub fn new() -> Self {
Test { a: &mut "test" }
}
pub fn dostuff(&'a mut self) {
self.a = "test";
}
pub fn fixme(&'a mut self) {
let mut i = 0;
while i < 10 {
self.dostuff();
i += 1;
}
}
}
fn main() {
let mut test = Test::new();
test.fixme();
}
error[E0499]: cannot borrow `*self` as mutable more than once at a time
--> src/main.rs:19:13
|
19 | self.dostuff();
| ^^^^ mutable borrow starts here in previous iteration of loop
...
22 | }
| - mutable borrow ends here
Je ne parviens pas à comprendre comment résoudre ce problème. J'ai besoin de la correction pour conserver les mêmes signatures de fonction. Mon code est beaucoup plus complexe, mais cet extrait le réduit au strict minimum.
Voici the complete code of what I'm trying to solve.
* J'ai besoin de la correction pour garder les mêmes fonctions * - si nous ne pouvons rien changer, nous ne pouvons rien réparer. – Shepmaster
Avez-vous une bonne raison d'utiliser '& str' au lieu d'un' String'? Si 'Test' possède la chaîne, utilisez le type appartenant. – Boiethios
J'ai ajouté le code réel avec lequel j'ai des problèmes. Poussé à un repo git. L'aire de jeu n'était qu'un exemple de l'erreur elle-même. – Chronium