我看到这个代码 在野外:
fields.sort_by_key(|&(_, ref field)| field.tags().into_iter().min().unwrap()); let fields = fields;
let fields = fields;线是做什么的? 为什么它在那里?
let fields = fields;
语句 let var = var;使 var不可变并绑定到它的当前值。 fields在前面声明为 mut。
let var = var;
var
fields
mut
它使 fields再次不可变。
fields以前定义为可变的(let mut fields = …;) ,与 sort_by_key一起使用,sort_by_key就地排序并要求目标是可变的。作者选择在这里显式地防止进一步的可变性。
let mut fields = …;
sort_by_key
将可变绑定“降级”为不可变绑定在 Rust 中很常见。
另一种常见的方法是使用块表达式:
let fields = { let mut fields = …; fields.sort_by_key(…); fields };