Что делает "let x = x" в Rust?

Я видел этот код в дикой природе:

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 ранее.