fields.sort_by_key(|&(_, ref field)| field.tags().into_iter().min().unwrap());
let fields = fields;
Что означает let fields = fields; линию делать? Почему это там?
Ответ 1
Это делает fields неизменяемыми снова.
fields ранее были определены как изменяемые (let mut fields = …;), для использования с sort_by_key который сортирует на месте и требует, чтобы цель была изменяемой. Автор выбрал здесь, чтобы явно предотвратить дальнейшую изменчивость.
"Понижение" изменчивой привязки к неизменяемому довольно распространено в Rust.
Другой распространенный способ сделать это - использовать выражение блока:
let fields = {
let mut fields = …;
fields.sort_by_key(…);
fields
};
Ответ 2
Утверждение let var = var; делает var неизменным и привязанным к его текущему значению. fields было объявлено как mut ранее.