Я бачив цей код у дикій природі :
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якого сортується на місці і вимагає змінити ціль. Автор вирішив тут чітко запобігти подальшій незмінності.
"Пониження" змінного зв'язування на незмінне досить поширене у Русті.
Ще один поширений спосіб зробити це - використання виразу блоку:
let fields = {
let mut fields = …;
fields.sort_by_key(…);
fields
};
Заява let var = var;робить varнепорушною і прив'язується до її поточного значення. fieldsбуло оголошено як mutраніше.