如何避免在Ocaml中隐藏stdlib模块



我有一个程序,它使用Ocaml标准库中的Bytes模块,还打开文件顶部的Core_kernel.Std模块

open Core_kernel.Std
...
   let let buf = Bytes.make bom_len 'x00' in

我遇到的问题是,最新版本的Core_kernel引入了一个新的Bytes模块,该模块遮蔽了标准库中的Bytes,这导致了Unbound value Bytes.make编译错误。

有没有一种方法可以在不去掉文件顶部的open的情况下解决这个命名问题?如果我这样做,那就需要改变很多事情。

您可以为Bytes模块提供一个替代名称,例如:

module B = Bytes
open Core_kernel.Std
let buf = B.make 10 'x00'

然后在代码中进行搜索替换,将Bytes更改为B

另一个解决方案是避免使用open,但我想这需要对代码进行大量更改。

Core_kernel提供了Caml模块,该模块绑定了标准库中可用的所有内容。

所以,你可以把它写成

open Core_kernel.Std
...
   let buf = Caml.Bytes.make bom_len 'x00' in

不幸的是,Caml.Bytes仅在113.00.00版本中添加,该版本尚未在OPAM中。

相关内容

  • 没有找到相关文章

最新更新