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

Byj*_*edu 4 scala

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

sep*_*p2k 11

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

我知道唯一接近完全类型推断的OO语言是OCaml.OCaml通过广泛使用结构类型来实现这一点(oin 的推断类型let f o = o.foo 42是"具有作为参数的foo方法的对象int",推断的返回类型是"无论返回类型是什么o.foo",这是唯一有用的在这里推断类型).

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


Dan*_*ral 6

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