什么'让x = x'在Rust中做什么?

tim*_*ion 103 rust

在野外看到了这段代码:

fields.sort_by_key(|&(_, ref field)| field.tags().into_iter().min().unwrap());
let fields = fields;
Run Code Online (Sandbox Code Playgroud)

这条let fields = fields;线做什么?为什么会这样?

mca*_*ton 130

fields再次变得不可变.

fields之前被定义为mutable(let mut fields = …;),用于sort_by_key在适当的位置进行排序并要求目标是可变的.作者在此选择明确防止进一步的可变性.

在Rust中,"降级"可变绑定到不可变是很常见的.

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

let fields = {
    let mut fields = …;
    fields.sort_by_key(…);
    fields
};
Run Code Online (Sandbox Code Playgroud)

  • 或者"升级",取决于您的观点. (37认同)
  • IMO是另一种写作方式:可变变量是我们需要使用它的时间范围,然后它被移动.它在语义上更好. (7认同)
  • @iago-lito [最近对该问题的评论](https://github.com/rust-lang/rust/issues/58622#issuecomment-1180324150)表明现在两个示例生成相同的代码。 (2认同)

Gov*_*mar 16

该语句let var = var;使得var不可变并绑定到其当前值.fields被宣布为mut更早.