J'ai vu ce code à l'état sauvage :
fields.sort_by_key(|&(_, ref field)| field.tags().into_iter().min().unwrap());
let fields = fields;
Que fait le let fields = fields;
ligne faire? Pourquoi est-il là?
Cela rend fields
immuable à nouveau.
fields
était précédemment défini comme mutable (let mut fields = …;
), à utiliser avec sort_by_key
qui trie sur place et nécessite que la cible soit modifiable. L'auteur a choisi ici d'empêcher explicitement toute mutabilité supplémentaire.
La "rétrogradation" d'une liaison mutable en immuable est assez courante dans Rust.
Une autre méthode courante consiste à utiliser une expression de bloc:
let fields = {
let mut fields = …;
fields.sort_by_key(…);
fields
};
La déclaration let var = var;
rend var
immuable et lié à sa valeur actuelle. fields
a été déclaré comme mut
plus tôt.