module - 扩展 OCaml 模块
问题描述
有没有办法向 OCaml 中已经存在的模块添加功能?
具体来说,我有一些模块Loc
可以跟踪源文件中的位置。我还有一个名为的模块Ast
,它代表一些代码的抽象语法树。我希望在 中Loc.of_ast
定义方法ast.ml
,从而扩展Loc
. 有没有办法做到这一点?
注意:这可能是 XY 问题。我倾向于相信这样的模块扩展是可能的原因是,在电池中,有诸如String.of_int
和之类的方法Int.of_string
,这意味着这些模块是相互递归的。当然,它们并没有完全定义在同一个文件中......
解决方案
您可以做的是创建一个新模块,称为现有模块,并将现有模块的include
所有功能放入您的新模块中。新模块隐藏了现有模块,您可以使用所有新定义的功能。
顺便说一句,这就是电池的做法。
module List = struct
include List
let empty = []
end;;
List.empty;;
(* - : 'a list = [] *)
推荐阅读
- sql - dolphindb 支持列表查询吗?
- c++ - 运算符 = 的 C++ 结果在返回 *this 后发生变化
- javascript - React 无法识别 `tReady` 道具
- node.js - 这个节点命令的windows版本是什么?
- migration - 如何在数据库迁移TypeORM(NodeJS)中一次迁移失败时回滚所有迁移
- git - Git 中的非选项参数
- ajax - 如何在 ASP.NET MVC 中调用 Ajax Delete?
- node.js - 斜杠命令响应正文是缓冲区
- python - 使用 dict 和 pyahocorasick 改进搜索
- r - echarts4r:如何将线条颜色与图例匹配