gpt4 book ai didi

ocaml - OCaml 中的函数重载

转载 作者:行者123 更新时间:2023-12-04 08:14:59 25 4
gpt4 key购买 nike

我定义了一些类型:

type box = Box of int
type table = Table of int
type compare_result = Lt | Eq | Gt

似乎在 OCaml 中,我们不能定义 2 个名称相同但参数类型不同的函数:
let compare (a: box) (b: box): compare_result = (...)
let compare (a: table) (b: table): compare_result = (...)

let res_box = compare (Box 1) (Box 2) in (* which is supposed to call the first funciton *)
let res_table = compare (Table 1) (Table 2) in (* which is supposed to call the second function *)

那么谁能告诉我 OCaml 中的替代方法是什么?我们是否必须以不同的方式命名这两个函数?

最佳答案

是的,最简单的解决方案就是以不同的方式调用函数。允许执行此操作的程序极大地使类型系统复杂化(不是到专家无法设计解决方案的地步:到了当他们这样做时您会发现它无法使用的地步)。

编写单个函数的现有解决方案 compare是 OCaml 中的对象系统,以及 Haskell 中的类型类(对相同基本类型系统的不同扩展)。但是留在简单的片段中并命名您的函数要简单得多 compare不同。

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

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