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:
fields
Znowu czyni niezmiennym.
fields
został wcześniej zdefiniowany jako mutable ( let mut fields = …;
), do użycia z sort_by_key
któ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 var
niezmienną i powiązaną z jej bieżącą wartością. fields
został zadeklarowany jak mut
wcześniej.