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