首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

OCaml 的模块,Sig 和ml,mli文件

mli文件,就像是java 的interface,但是并不完全一样。特别是当你用dune构建系统的时候,你可能甚至不需要注意到mli文件的存在。dune会帮你自动处理。

我曾经试过只写ml文件,不去管mli文件,一样能编译。

有时候如果你强行去探求问题的真相,可能会很痛苦:这样怎么可以?这不是乱来吗?所以人要学会跟自己和解,存在即合理。

OCaml它就是这样灵活,给了你很大自由。

另外。我们注意到我们如果定义了module type XXXX sig,这个称之为签名,我们一定要把它放到我们要使用的module同一个文件。

什么意思呢。就是如果你放到不同的文件,OCaml编译器甚至都找不到。。会报错。

所以sig 写在哪里,module实现就写在哪里。

举个例子,我们看我们的一个示例类库的ml文件和mli文件

netrc.ml文件

netrc.mli文件

我们通过ocamlc -i netrc.ml > netrc.mli 可以自动生成mli文件【相当于生成interface】

我们注意到module type sig 在ml文件里面出现了,然后生成的mli文件又出现了。。

看到没有,这就是我说的 module type 在哪里定义,module 就在哪里实现。

module Netrc它实现了Netrc_type sig中定义的方法。

我们在sig定义了三个方法,然后我们实现的时候,实现了3个方法。这两边就对上号了。

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20220629A027XF00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券