println! emprunte ou prend possession de la variable en Rust ?
Bonjour à tous ! Je viens de commencer à apprendre Rust et j'essaie de comprendre le système de possession. J'ai un code simple :
```rust
fn main() {
let s = String::from("Hello");
println!("{}", s);
println!("{}", s); // Deuxième tentative d'affichage
}
```
Je m'attendais à ce qu'après le premier `println!`, la variable `s` soit déplacée (move) à l'intérieur de la macro et devienne invalide, comme cela se produit lors du passage à une fonction qui prend une `String` par valeur. Mais le code fonctionne ! Pourquoi ?
J'ai lu que `println!` est une macro, pas une fonction. Peut-être qu'elle se comporte différemment ? Si j'écrivais :
```rust
fn print_string(s: String) {
println!("{}", s);
}
fn main() {
let s = String::from("Hello");
print_string(s);
print_string(s); // Erreur : use of moved value
}
```
— alors ça