Ho visto questo codice in natura :
fields.sort_by_key(|&(_, ref field)| field.tags().into_iter().min().unwrap());
let fields = fields;
Cosa fa la let fields = fields;linea? Perché c'è?
Ho visto questo codice in natura :
fields.sort_by_key(|&(_, ref field)| field.tags().into_iter().min().unwrap());
let fields = fields;
Cosa fa la let fields = fields;linea? Perché c'è?
Risposte:
Rende di fieldsnuovo immutabile.
fieldsera precedentemente definito come mutable ( let mut fields = …;), da utilizzare con il sort_by_keyquale ordina sul posto e richiede che il target sia mutabile. L'autore ha scelto qui di impedire esplicitamente un'ulteriore mutabilità.
Il "downgrade" di un'associazione mutabile a immutabile è abbastanza comune in Rust.
Un altro modo comune per farlo è usare un'espressione di blocco:
let fields = {
let mut fields = …;
fields.sort_by_key(…);
fields
};
L'istruzione let var = var;rende varimmutabile e vincolata al suo valore corrente. fieldsè stato dichiarato come mutprima.