我想知道爲什麼斯卡拉不能推斷方法參數的類型。我可以看到,在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