types - 什么时候将数字文字分配给默认类型?

标签 types rust

我正在研究一些代码并做出以下观察:

let x = 1;
let () = x;

error: mismatched types [E0308]
note:  expected type `_`
note:     found type `()`

这显然失败了,但我期望错误指出预期类型是 i32,而不是 _。我发现对于未指定类型的 float 文字也会发生同样的情况,例如1.0

为什么会这样?该类型不应该被称为默认类型吗?

更新:从 Rust 1.12 开始,错误消息提供了更多信息:

expected integral variable, found ()

= note: expected type `{integer}`
= note:    found type `()`

最佳答案

Rust 不仅从初始化中进行类型推断,而且从每次使用中进行类型推断。因此,它的类型检查器必须查看变​​量的每次使用以确定它是什么类型,并且需要随着它的进行推断和检查类型。

这意味着 let () = x; 是同一过程的一部分。它是 x 的用法,因此必须检查以查看 x 可能是什么具体类型。在编译器仍在尝试推断 x 的类型的同时,发现没有可能的类型可以匹配 (),因此没有选择默认值,因为默认值仅在编译器查看了 x 的所有用法但未找到任何内容时使用。

关于types - 什么时候将数字文字分配给默认类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39595782/

相关文章:

jQuery 插件不适用于 Angular 5(插件不是函数)

c++ - 为什么这个模板扩展在 C++ 中是合法的?

c - 这是什么类型的函数(带代码的指针函数)?

java - 将整数类型分配给 int

rust - 我可以将向量中子向量的项添加到同一向量中的另一个子向量吗?

string - 如何在 Rust 中对字符串的字符进行排序?

rust - 如何解决 "use of moved value"和 "which does not implement the ` Copy` trait”?

c++ - C 和 C++ 中内置数据类型的类型是什么?

rust - 如何以编程方式编译 Rust 程序?

rust - Accelerate 上单精度 float 的 snrm2 计算不稳定