web-dev-qa-db-fra.com

Que fait «laisser x = x» dans Rust?

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à?

114
timthelion

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
};
140
mcarton

La déclaration let var = var; rend var immuable et lié à sa valeur actuelle. fields a été déclaré comme mut plus tôt.

18
Govind Parmar