我看到了这个代码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一起使用,后者进行适当排序,并要求目标是可变的.作者 Select 在这里明确地防止进一步的可变性.

将可变绑定"降级"为不可变绑定在Rust 中非常常见.

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

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

Rust相关问答推荐

捕获Rust因C++异常而产生panic

为什么幻影数据不能自动推断?

使用元组执行条件分支的正确方法

有没有办法模仿对象安全克隆?

用 rust 蚀中的future 展望 struct 的future

为什么我们需要std::thread::scope,如果我们可以使用thread.join()在函数的生命周期内删除引用?

如何修复数组中NewType导致的运行时开销

完全匹配包含大小写的整数范围(&Q;)

在复制类型中使用std::ptr::WRITE_VILAR进行内部可变性的安全性(即没有UnSafeCell)

使用关联类型重写时特征的实现冲突

如何重命名 clap_derive 中的子命令占位符?

仅发布工作区的二进制 crate

try 从标准输入获取用户名和密码并删除 \r\n

缺失serde的字段无法设置为默认值

borrow 匹配手臂内部的可变

打印 `format_args!` 时borrow 时临时值丢失

如何在 Rust 中将 bson::Bson 转换为 Vec

n 个范围的笛卡尔积

从 Cranelift 发出 ASM

Abortable:悬而未决的期货?