Tôi không hiểu lỗi cannot move out of borrowed content. Tôi đã nhận được nó nhiều lần và tôi đã luôn giải quyết nó, nhưng tôi chưa bao giờ hiểu tại sao.
Ví dụ:
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);
}
tạo ra lỗi:
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
Trong các phiên bản mới hơn của Rust, lỗi là
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
Tôi đã giải quyết nó bằng cách nhân bản line:
for current_char in line.clone().into_bytes().iter() {
Tôi không hiểu lỗi ngay cả sau khi đọc các bài viết khác như:
- Không thể mượn Tệp từ & mut self (thông báo lỗi: không thể chuyển ra khỏi nội dung mượn)
- Thay đổi một nút trong cây trong Rust
Nguồn gốc của loại lỗi này là gì?
.as_bytes()
as_bytes()mà không cần nhân bản. Nhưng tôi vẫn không hiểu tại sao?
.bytes()phương thức.)