何时将数字文字分配给默认类型?

时间:2016-09-20 13:42:49

标签: types rust

我正在玩一些代码,并做了以下观察:

let x = 1;
let () = x;

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

这显然失败了,但我希望错误说明期望的类型是i32,而不是_。我发现同样的情况发生在一个未指定类型的浮动文字中,例如: 1.0

为什么会这样?该类型是否应该被称为默认类型?

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

expected integral variable, found ()

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

1 个答案:

答案 0 :(得分:8)

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

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