我在外面看到了这段代码 in the wild:
fields.sort_by_key(|&(_, ref field)| field.tags().into_iter().min().unwrap());
let fields = fields;
let fields = fields;
这一行代码是做什么用的?它为什么会在那里?
我在外面看到了这段代码 in the wild:
fields.sort_by_key(|&(_, ref field)| field.tags().into_iter().min().unwrap());
let fields = fields;
let fields = fields;
这一行代码是做什么用的?它为什么会在那里?
它使得fields
变得再次不可变。
fields
之前被定义为可变的(let mut fields = …;
),以便与sort_by_key
一起使用,该函数对目标进行就地排序并需要目标是可变的。作者在此选择明确防止进一步的可变性。
在Rust中,“降级”可变绑定为不可变是非常常见的。
另一种常见的方法是使用块表达式:
let fields = {
let mut fields = …;
fields.sort_by_key(…);
fields
};
语句 let var = var;
使得变量 var
变成不可变,并绑定到它当前的值。变量 fields
在之前被声明为 mut
。