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 à fields
nouveau immuable.
fields
a été précédemment défini comme mutable ( let mut fields = …;
), à utiliser avec sort_by_key
quels 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 var
immuable et liée à sa valeur actuelle. fields
a été déclaré comme mut
précédemment.