5
A
回答
13
這一切都取決於你的意思是超載。有幾種用例,例如:
如果您想在數學表達式中使用通常的中綴操作符名稱,請使用除整數之外的其他操作符:在本地重新綁定操作符;模塊和「本地開放」可以提供幫助。
module I32 = struct
open Int32
let (+), (-), (*), (/), (!!) = add, sub, mul, div, of_int
end
... I32.(x + y * !!2) ...
如果你想行動是在正在使用的數字類型的類型多態,你需要在抽象的數字等運營商。例如,通用的快速冪函數(一個整數),可以在矩陣等
let rec pow (*) one a = function
| 0 -> one
| n -> pow (*) (if n mod 2 = 0 then one else one * a) (a * a) (n/2)
let() = assert (pow (*.) 1. 2. 3 = 8.)
更普遍的,是的,這個想法是可以用來捕捉你想要的「過載」爲一組什麼操作符(這裏是infix操作符,但是普通名稱很好,通常對於可讀性來說更好),並且通過這些操作的字典進行傳遞和抽象 - 這很像Haskell類型類被編譯到的實際上。
相關問題
- 1. OCaml重載數字文字與Camlp4
- 2. 使用menhir和OCaml重載乘法
- 3. OCaml - 如果地圖在標準OCaml中?
- 4. OCaml - 如何加載file.ml
- 5. 功能在OCaml中
- 6. 如何在OCaml中
- 7. OCaml重新定義中綴運算符
- 8. OCaml中
- 9. OCaml中
- 10. OCaml中
- 11. OCaml中
- 12. OCaml中
- 13. OCaml中
- 14. OCaml中
- 15. OCaml中
- 16. OCaml中
- 17. OCaml中
- 18. OCaml中
- 19. 在OCAML
- 20. 在Python中重載方法:更重載
- 21. 在C中重載還是不重載?
- 22. 重載/重寫在Java中
- 23. 如何在OCaml中畫線?
- 24. 在OCaml中輸入錯誤
- 25. 在OCaml中展開元組
- 26. 在ocaml中截斷文件
- 27. 在OCaml中打印元組
- 28. 在ocaml中解析yaml
- 29. 在Ocaml中處理單元
- 30. 在CIL(OCaml)中打印
我注意到你在模塊I32中做了'打開Int32',如果你在那裏做了'包含Int32',會有什麼不同呢?在這方面他們基本上是否相同? – aneccodeal
@aneccodeal:那將會非常不同:如果我使用'include',這個'I32'將包含所有'Int32',所以在本地打開'I32'將特別導入'Int32'的所有定義。我不想「打開」大範圍,因爲它可能會影響用戶定義。 – gasche