我想知道为什么scala无法推断出方法参数的类型。我可以看到haskel(也有类型推断)可以做同样的事情。那为什么不为斯卡拉?
答案 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在子类型存在的情况下不起作用。