Avatar ·

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