Eu vi este código à solta :
fields.sort_by_key(|&(_, ref field)| field.tags().into_iter().min().unwrap());
let fields = fields;
O que a let fields = fields;linha faz? Por que está aí?
Eu vi este código à solta :
fields.sort_by_key(|&(_, ref field)| field.tags().into_iter().min().unwrap());
let fields = fields;
O que a let fields = fields;linha faz? Por que está aí?
Respostas:
Torna fieldsimutável novamente.
fieldsfoi definido anteriormente como mutable ( let mut fields = …;), para ser usado com o sort_by_keyqual classifica no local e requer que o destino seja mutável. O autor optou aqui por prevenir explicitamente mais mutabilidade.
"Desclassificar" uma ligação mutável para imutável é bastante comum em Rust.
Outra maneira comum de fazer isso é usar uma expressão de bloco:
let fields = {
let mut fields = …;
fields.sort_by_key(…);
fields
};
A declaração let var = var;torna-se varimutável e limitada ao seu valor atual. fieldsfoi declarado como mutantes.