为什么scala无法推断出方法参数的类型

时间:2010-10-06 09:17:14

标签: scala

我想知道为什么scala无法推断出方法参数的类型。我可以看到haskel(也有类型推断)可以做同样的事情。那为什么不为斯卡拉?

2 个答案:

答案 0 :(得分:11)

首先,Scala中的情况与Haskell有很大的不同,因为它是一种OO语言,面向对象设置中的类型推断有点复杂。

我知道唯一接近完全类型推断的OO语言是OCaml。 OCaml通过大量使用结构类型来实现这一点(o中推断的let f o = o.foo 42类型是“具有foo方法的对象,该方法将int作为参数”并且推断的返回类型是“o.foo的返回类型”,这是唯一有用的推断类型。)

然而,Scala有许多额外的功能(重载,隐式转换)会妨碍OCaml的方法,并且不可能进行完整的全局类型推断。

答案 1 :(得分:6)

简而言之,Haskell使用的类型推理算法Hindley-Milner在子类型存在的情况下不起作用。