2016-09-20 61 views
3

我玩弄一些代码,并提出以下意见:何时将数字文字分配给默认类型?

let x = 1; 
let() = x; 

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

这显然会失败,但我期待错误地指出,预期的类型是i32,不_。我发现同样的情况发生在未指定类型的浮动字面上,例如1.0

这是为什么?不应该将该类型称为默认类型?

更新:铁锈1.12,错误消息是更多的信息:

expected integral variable, found() 

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

我觉得失败太明显了。 typechecker没有足够的实际插入默认值,因为这是行不通的。我只见过错误消息中的默认值,当时这是一系列关闭和泛型方法 –

回答

8

锈不只是从初始化类型推断,但是从每次使用。因此,它的类型检查器必须查看变​​量的每一种用法来决定它是什么类型,并且随着它的推进需要推断和检查类型。

这意味着let() = x;是同一过程的一部分。这是一个使用x,因此必须检查,看看具体类型x可能是。在编译器仍然试图推导出x类型的同时发现没有可能的类型匹配()这一事实,因此没有选择默认值,因为缺省值仅在编译器查看所有用法时使用的x,并没有发现任何东西。

相关问题