Nie rozumiem błędu cannot move out of borrowed content
. Otrzymałem go wiele razy i zawsze go rozwiązywałem, ale nigdy nie rozumiałem dlaczego.
Na przykład:
for line in self.xslg_file.iter() {
self.buffer.clear();
for current_char in line.into_bytes().iter() {
self.buffer.push(*current_char as char);
}
println!("{}", line);
}
powoduje błąd:
error[E0507]: cannot move out of borrowed content
--> src/main.rs:31:33
|
31 | for current_char in line.into_bytes().iter() {
| ^^^^ cannot move out of borrowed content
W nowszych wersjach Rusta błąd to
error[E0507]: cannot move out of `*line` which is behind a shared reference
--> src/main.rs:31:33
|
31 | for current_char in line.into_bytes().iter() {
| ^^^^ move occurs because `*line` has type `std::string::String`, which does not implement the `Copy` trait
Rozwiązałem to przez sklonowanie line
:
for current_char in line.clone().into_bytes().iter() {
Nie rozumiem błędu nawet po przeczytaniu innych postów typu:
- Nie można pożyczyć pliku z & mut self (komunikat o błędzie: nie można wyjść z wypożyczonej zawartości)
- Zmiana węzła w drzewie w Rust
Jakie jest źródło tego rodzaju błędu?
.as_bytes()
as_bytes()
bez klonowania. Ale nadal nie rozumiem, dlaczego?
.bytes()
metodę.)