Avatar ·

Pourquoi ne peut-on pas stocker une valeur et une référence à celle-ci dans une même structure en Rust ?

Bonjour à tous ! J'ai commencé à apprendre Rust et je suis tombé sur un problème que je n'arrive pas à résoudre depuis plusieurs jours. J'écris un analyseur pour des fichiers de configuration. J'ai une structure `Parser` qui lit les données d'une chaîne et fournit un itérateur sur les mots. Voici le code simplifié : ```rust struct Parser { data: String, words: Vec<&str>, // références à data } impl Parser { fn new(input: &str) -> Self { let data = input.to_string(); let words: Vec<&str> = data.split_whitespace().collect(); Parser { data, words } // erreur ! } } ``` Le compilateur donne l'erreur : `cannot move out of 'data' because it is borrowed`. Je comprends que `words` contient des références à `data`, mais `data` et `words` sont dans la même structure ! Rust ne devrait-il pas comprendre qu'elles vivent ensemble ? J'ai essayé différentes approches : utiliser `Rc`, changer l'ordre des champs, ajouter une durée de vie — rien n'aide. Peut-être que je conçois mal la structure ? Comment stocker dans Rust une