gpt4 book ai didi

types - Ocaml - 多态打印和类型丢失

转载 作者:行者123 更新时间:2023-12-01 18:58:12 30 4
gpt4 key购买 nike

OCaml中有print_int、print_endline、Printf等一系列函数。我不能做这样的事情:

let n = 10 in
print n;; (* And I haven't to change `print` in case type of `n` changed *)

这就是 Java、C#、Python 等中的多态打印。相反,我们有类似 C 语言的类型,由程序员显式定义。所以我认为 OCaml 在编译期间丢失了类型信息,并且在运行时没有它,对吧?这就是为什么我们还需要 mli 文件的原因?

编辑:我厌倦了编写 *print_listi*、*print_list_tuple2i* ​​等函数。我怎样才能做得更好?

最佳答案

你是对的:OCaml 在运行时丢弃类型,因此无法区分你的 10 是否真的是 int 或第 10 个 0 元变体构造函数。构造函数名称都不可用,因此无法打印数据。

而且,OCaml 的多态性是参数化的。您不能定义根据类型不同而工作方式不同的函数。

此问题的一个部分解决方法是使用 CamlP4 自动生成数据类型的打印机函数。但是,你仍然不可能拥有适用于所有情况的“多魔法”打印品。您必须手动组合打印机,例如 print_list (print_option print_int)。

几年前我已经扩展了 OCaml 来拥有这样的多态打印(和其他好的东西)。它称为 GCaml。但维护时间不长。

mli 文件与此无关。它们用于编写模块签名,为模块用户隐藏更简单接口(interface)的实现。

关于types - Ocaml - 多态打印和类型丢失,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7442449/

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