Я не розумію помилки cannot move out of borrowed content
. Я його отримував багато разів і завжди вирішував, але ніколи не розумів, чому.
Наприклад:
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);
}
видає помилку:
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
У нових версіях Rust помилка є
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
Я вирішив це шляхом клонування line
:
for current_char in line.clone().into_bytes().iter() {
Я не розумію помилки навіть після читання інших публікацій, таких як:
- Неможливо запозичити файл у файлу & mut self (повідомлення про помилку: не може переміститися із позикового вмісту)
- Зміна вузла на дереві в Русті
У чому походження подібного роду помилок?
.as_bytes()
as_bytes()
без клонування. Але я досі не розумію, чому?
.bytes()
метод.)