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 fields
nuovo immutabile.
fields
era precedentemente definito come mutable ( let mut fields = …;
), da utilizzare con il sort_by_key
quale 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 var
immutabile e vincolata al suo valore corrente. fields
è stato dichiarato come mut
prima.