我想知道为什么斯卡拉不能推断方法参数的类型。我可以看到,在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. 斯卡拉的类型推断和多参数列表
- 8. 类型推断没有在斯卡拉
- 9. 斯卡拉 - 修真类型推断
- 10. 斯卡拉咖喱和类型推断
- 11. 在斯卡拉,为什么类型注释必须遵循函数参数?为什么编译器不能推断函数参数类型?
- 12. 斯卡拉:方法重载和类型推断
- 13. 斯卡拉,为什么我不需要导入推导类型
- 14. 为什么不能推断这些类型的参数?
- 15. 为什么不能推断委托参数的类型?
- 16. 斯卡拉类型参数
- 17. 斯卡拉2.8:匿名函数类型推断为默认参数
- 18. 斯卡拉类型推迟
- 19. 使用类型参数的类型参数作为斯卡拉
- 20. 斯卡拉方法参数
- 21. 斯卡拉 - 传递性状类型作为方法参数
- 22. 的方法的类型参数“HttpRequest.asJson()”不能推断
- 23. 斯卡拉语法查询,返回类型推断
- 24. 浮油斯卡拉方法推断泛型
- 25. 斯卡拉请参阅类型参数
- 26. 解决方法的类型参数不能从使用推断
- 27. 斯卡拉。如何推断类继承
- 28. 斯卡拉类的方法与类实例作为参数
- 29. 调用非严格功能斯卡拉为明确的类型不能编译,推断类型的作品
- 30. 斯卡拉类型界限的可变参数方法
是的。特别是超载是Hindley-Milner式推理的一个难题。 – Landei 2010-10-06 10:14:34