Я бачив цей код у дикій природі :
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
раніше.