Widziałem ten kod na wolności :
fields.sort_by_key(|&(_, ref field)| field.tags().into_iter().min().unwrap());
let fields = fields;
Co robi let fields = fields;linia? Dlaczego tam jest?
Widziałem ten kod na wolności :
fields.sort_by_key(|&(_, ref field)| field.tags().into_iter().min().unwrap());
let fields = fields;
Co robi let fields = fields;linia? Dlaczego tam jest?
Odpowiedzi:
fieldsZnowu czyni niezmiennym.
fieldszostał wcześniej zdefiniowany jako mutable ( let mut fields = …;), do użycia z sort_by_keyktórym sortuje w miejscu i wymaga, aby cel był mutowalny. Autor zdecydował się tutaj wyraźnie zapobiec dalszej zmienności.
„Obniżenie” zmiennego powiązania na niezmienne jest dość powszechne w Rust.
Innym powszechnym sposobem na to jest użycie wyrażenia blokowego:
let fields = {
let mut fields = …;
fields.sort_by_key(…);
fields
};
Instrukcja let var = var;czyni varniezmienną i powiązaną z jej bieżącą wartością. fieldszostał zadeklarowany jak mutwcześniej.