gpt4 book ai didi

ocaml - Ocaml中的重载

转载 作者:行者123 更新时间:2023-12-04 05:33:11 27 4
gpt4 key购买 nike

我知道 OCaml 不支持重载。那么,我们可以做些什么来解决这个问题,而不是重载呢?

1)改用多态性?
2)给不同的功能不同的名字?
3)把同名的函数放在不同的模块中?

哪一个会起作用?

最佳答案

这完全取决于您所说的重载是什么意思。有几个用例,例如:

如果您想在数学表达式中使用通常的中缀运算符名称来操作整数以外的其他内容:在本地重新绑定(bind)运算符;模块和“本地开放”可以帮助解决这个问题。

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.)

更一般地说,是的,这个想法是将您想要“重载”的内容作为一组运算符(这里是中缀运算符,但简单的名称很好,而且通常更好的可读性),并传递和抽象这些操作的字典 - - 事实上,很像 Haskell 类型的类被编译成什么。

关于ocaml - Ocaml中的重载,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10498456/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com