Vi este código en la naturaleza :
fields.sort_by_key(|&(_, ref field)| field.tags().into_iter().min().unwrap());
let fields = fields;
¿Qué hace la let fields = fields;
línea? ¿Por qué está ahí?
Vi este código en la naturaleza :
fields.sort_by_key(|&(_, ref field)| field.tags().into_iter().min().unwrap());
let fields = fields;
¿Qué hace la let fields = fields;
línea? ¿Por qué está ahí?
Respuestas:
Se vuelve fields
inmutable de nuevo.
fields
se definió previamente como mutable ( let mut fields = …;
), para usarse con lo sort_by_key
que ordena en el lugar y requiere que el objetivo sea mutable. El autor ha optado aquí por evitar explícitamente una mayor mutabilidad.
La "degradación" de un enlace mutable a inmutable es bastante común en Rust.
Otra forma común de hacer esto es usar una expresión de bloque:
let fields = {
let mut fields = …;
fields.sort_by_key(…);
fields
};
La declaración la let var = var;
hace var
inmutable y ligada a su valor actual. fields
fue declarado como mut
antes.