¿println! toma prestado o toma posesión de una variable en Rust?
¡Hola a todos! Acabo de empezar a aprender Rust y estoy tratando de entender el sistema de ownership. Tengo un código simple:
```rust
fn main() {
let s = String::from("Hello");
println!("{}", s);
println!("{}", s); // Segundo intento de imprimir
}
```
Esperaba que después del primer `println!`, la variable `s` se moviera (move) dentro de la macro y se volviera inválida, como ocurre al pasarla a una función que toma `String` por valor. ¡Pero el código funciona! ¿Por qué?
He leído que `println!` es una macro, no una función. ¿Quizás se comporta de manera diferente? Si escribiera:
```rust
fn print_string(s: String) {
println!("{}", s);
}
fn main() {
let s = String::from("Hello");
print_string(s);
print_string(s); // Error: use of moved value
}
```
— obtendría un error de compilación. Pero con `println!` todo funciona. ¿Significa esto que `println!` toma prestada la variable, en lugar de tomar posesión? ¿O la clona automáticamente? Por favor, explíquenme.
No answers yet.
Inicia sesión para dejar una respuesta