No entiendo el error cannot move out of borrowed content
. Lo he recibido muchas veces y siempre lo he resuelto, pero nunca he entendido por qué.
Por ejemplo:
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);
}
produce el error:
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
En versiones más recientes de Rust, el error es
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
Lo resolví clonando line
:
for current_char in line.clone().into_bytes().iter() {
No entiendo el error incluso después de leer otras publicaciones como:
- No se puede tomar prestado el archivo de & mut self (mensaje de error: no se puede salir del contenido prestado)
- Cambiar un nodo en un árbol en Rust
¿Cuál es el origen de este tipo de error?
.as_bytes()
as_bytes()
sin clonación. Pero todavía no entiendo por qué?
.bytes()
método.)