我想知道为什么斯卡拉不能推断方法参数的类型。我可以看到,在haskel(它也有类型推理)可以做同样的事情。那么为什么不为Scala?为什么斯卡拉不能推断方法参数的类型
4
A
回答
11
首先,Scala的情况与Haskell有很大不同,因为它是面向对象的语言,面向对象设置中的类型推断有点复杂。
我知道的唯一的OO语言接近全类型推断是OCaml。 OCaml通过广泛使用结构分型来实现这一点(let f o = o.foo 42
中的o
的推断类型是“具有foo
方法的对象,其将int
作为参数”并且推断的返回类型是“无论o.foo
的返回类型是什么”,这是这里推断的唯一有用的类型)。
但是Scala有很多额外的功能(重载,隐式转换)妨碍了OCaml的方法,并且无法进行全面的全局类型推断。
6
简而言之,Haskell使用的类型推断算法Hindley-Milner在存在子类型时不起作用。
+1
除了简单修改的版本* does *在OCaml中工作,它具有子类型。当然,它是*结构*子类型,而不是斯卡拉的主格子类型。 – 2013-10-29 06:44:16
相关问题
- 1. 斯卡拉的类型推断和多参数列表
- 2. 斯卡拉 - 修真类型推断
- 3. 斯卡拉:方法重载和类型推断
- 4. 斯卡拉,为什么我不需要导入推导类型
- 5. 为什么不能推断这些类型的参数?
- 6. 斯卡拉类型参数
- 7. 斯卡拉2.8:匿名函数类型推断为默认参数
- 8. 斯卡拉方法参数
- 9. 斯卡拉语法查询,返回类型推断
- 10. 浮油斯卡拉方法推断泛型
- 11. 斯卡拉。如何推断类继承
- 12. 斯卡拉类的方法与类实例作为参数
- 13. 斯卡拉类型界限的可变参数方法
- 14. 为什么不能为嵌套函数推断类型
- 15. 斯卡拉类型推断未能注意到这些类型是相同的,无论它们是什么
- 16. 斯卡拉类型推理,并获得更具体的两种类型参数作为方法结果
- 17. 为什么Scala不会推断特征类型参数?
- 18. 为什么scala编译器不能从超类中推断出类型参数?
- 19. 斯卡拉:参数化类型
- 20. Scala推断的类型参数 - 类型范围推断为'Nothing'
- 21. 泛型方法的类型参数的类型推断
- 22. 斯卡拉 - 使用参数化类型参数化类型
- 23. 斯卡拉更低类型绑定'是方法参数的子类型'限制
- 24. 类型推理在斯卡拉地图
- 25. 无法找到斯卡拉类型类的隐含参数
- 26. 斯卡拉斯卡拉 - 但类RDD是不变的类型T
- 27. 斯卡拉 - List.map类型推断错误失败
- 28. 为什么编译器不能推断泛型类型
- 29. 斯卡拉 - 参数方法和forSome
- 30. 的方法类型参数不能从辅助型的使用推断
是的。特别是超载是Hindley-Milner式推理的一个难题。 – Landei 2010-10-06 10:14:34