Avatar ·

Pourquoi en Rust il n'est pas recommandé d'accepter &String, &Vec et &Box comme arguments de fonctions ?

Bonjour à tous ! J'ai récemment commencé à apprendre Rust et j'ai remarqué une chose étrange : dans de nombreux tutoriels et sur Stack Overflow, on écrit qu'il ne faut pas écrire de fonctions qui acceptent `&String`, `&Vec` ou `&Box`. Au lieu de cela, on conseille d'utiliser `&str`, `&[T]` et simplement `&T` (ou `&T` pour Box). Mais je ne comprends pas bien quel est le problème. Voici un exemple simple que j'ai écrit pour travailler avec du texte : ```rust fn print_length(s: &String) { println!("Longueur de la chaîne : {}", s.len()); } fn main() { let my_string = String::from("Bonjour le monde !"); print_length(&my_string); } ``` Ce code fonctionne. Pourquoi est-il considéré comme un mauvais style ? En quoi `&String` est-il pire que `&str` ? Et la même chose avec les vecteurs : en quoi `&Vec` est-il pire que `&[i32]` ? Dans les deux cas, je passe une référence, pas la propriété. Ce qui me trouble, c'est que si j'écris une fonction avec `&str`, lors de l'appel avec une `String`, je dois explicitement convertir le type à chaque fois : `print_length(&my_string[..])` ou `print_length(my_string.as_str())`. Alors qu'avec `&String`, tout fonctionne directement.