Я видел этот код в дикой природе :
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раньше.