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.)