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