Tôi thấy mã này trong tự nhiên :
fields.sort_by_key(|&(_, ref field)| field.tags().into_iter().min().unwrap());
let fields = fields;
Không những gì let fields = fields;
dòng làm gì? Tại sao nó ở đó?
Tôi thấy mã này trong tự nhiên :
fields.sort_by_key(|&(_, ref field)| field.tags().into_iter().min().unwrap());
let fields = fields;
Không những gì let fields = fields;
dòng làm gì? Tại sao nó ở đó?
Câu trả lời:
Nó làm cho fields
bất biến một lần nữa.
fields
trước đây được định nghĩa là mutable ( let mut fields = …;
), được sử dụng sort_by_key
để sắp xếp tại chỗ và yêu cầu mục tiêu phải có thể thay đổi. Tác giả đã chọn ở đây để ngăn chặn rõ ràng sự biến đổi hơn nữa.
"Hạ cấp" một ràng buộc có thể thay đổi thành bất biến là khá phổ biến ở Rust.
Một cách phổ biến khác để làm điều này là sử dụng biểu thức khối:
let fields = {
let mut fields = …;
fields.sort_by_key(…);
fields
};
Tuyên bố let var = var;
làm cho var
bất biến và ràng buộc với giá trị hiện tại của nó. fields
đã được tuyên bố như mut
trước đó.