为什么要编译以下代码:

fn main() {
   let xs = [||1, ||2, ||3];
}

但是this不是吗?

fn main() {
   let xs = [(||1, 1), (||2, 2), (||3, 3)] ;
}

编辑:明确地说,问题不是why does it not compile.是what is the difference between these two that makes the first compile but the second does not?.

推荐答案

第一种情况是编译器中的特殊情况:当需要统一某些类型时(例如,当所有类型都是同一数组的元素时),并且所有类型都是非捕获闭包时,编译器会自动将它们强制为函数指针.然而,如果它们是包含非捕获闭包的元组,则这不起作用.

The relevant code in rustc is here,如果你感兴趣的话.

Rust相关问答推荐

如何在rust中有条件地分配变量?

收集RangeInclusive T到Vec T<><>

将JSON密钥转换为Polars DataFrame

trait声明中的生命周期参数

在函数内定义impl和在函数外定义impl的区别

带扫描的铁 rust 使用滤镜

在铁 rust 中,如何一次只引用几件事中的一件?

rust中的库插件管理器,现在是否可行?

有没有一种方法可以创建一个闭包来计算Rust中具有随机系数的n次多项式?

如何强制匹配的返回类型为()?

如何在 Emacs Elisp 中获得类似格式化的 LSP?

Rust/Serde/HTTP:序列化`Option`

在 Rust 中,为什么整数溢出有时会导致编译错误或运行时错误?

使用部分键从 Hashmap 中检索值

如果我不想运行析构函数,如何移出具有析构函数的 struct ?

TinyVec 如何与 Vec 大小相同?

如何从 many0 传播 Nom 失败上下文?

`if let` 只是另一种编写其他 `if` 语句的方式吗?

如果返回类型是通用的,我可以返回 &str 输入的一部分吗?

在 Rust 中组合特征的不同方法是否等效?