‘ let x = x’在 Rust 中有什么作用?

我看到这个代码 在野外:

fields.sort_by_key(|&(_, ref field)| field.tags().into_iter().min().unwrap());
let fields = fields;

let fields = fields;线是做什么的? 为什么它在那里?

6805 次浏览

语句 let var = var;使 var不可变并绑定到它的当前值。 fields在前面声明为 mut

它使 fields再次不可变。

fields以前定义为可变的(let mut fields = …;) ,与 sort_by_key一起使用,sort_by_key就地排序并要求目标是可变的。作者选择在这里显式地防止进一步的可变性。

将可变绑定“降级”为不可变绑定在 Rust 中很常见。

另一种常见的方法是使用块表达式:

let fields = {
let mut fields = …;
fields.sort_by_key(…);
fields
};