J'ai vu ce code dans la nature :
fields.sort_by_key(|&(_, ref field)| field.tags().into_iter().min().unwrap());
let fields = fields;
Que fait la let fields = fields;ligne? Pourquoi est-ce là?
J'ai vu ce code dans la nature :
fields.sort_by_key(|&(_, ref field)| field.tags().into_iter().min().unwrap());
let fields = fields;
Que fait la let fields = fields;ligne? Pourquoi est-ce là?
Réponses:
Cela rend à fieldsnouveau immuable.
fieldsa été précédemment défini comme mutable ( let mut fields = …;), à utiliser avec sort_by_keyquels types de tri sur place et nécessite que la cible soit mutable. L'auteur a choisi ici d'empêcher explicitement une mutabilité supplémentaire.
"Rétrograder" une liaison mutable en immuable est assez courant dans Rust.
Une autre façon courante de procéder consiste à utiliser une expression de bloc:
let fields = {
let mut fields = …;
fields.sort_by_key(…);
fields
};
La déclaration let var = var;rend varimmuable et liée à sa valeur actuelle. fieldsa été déclaré comme mutprécédemment.