我正在使用Yojson库,其中一个使用的构造函数叫做Bool(带有反引号)。我正在使用OCaml源码,其中使用了camlp5,因此反引号包围的文本被不同地解释(例如,文本被转换为OCaml数据结构)。
我遇到的问题是,当我的源代码中出现`Bool时,camlp5 / OCaml正在看到反引号并认为它是引用的开头,导致错误。我怎样才能确保将其解释为`Bool OCaml术语?有没有办法暂时关闭campl5的功能?我可以使用某种逃避角色吗?
答案 0 :(得分:3)
由于您使用的语法扩展会覆盖反引号的行为,因此您无法在同一文件中使用类似`Bool的多态变体。
我建议您首先更改语法扩展名以使用与反引号不同的字符。为什么不以%%
为例?
另一种解决方案很简单,但更详细:使用两个不同的文件,一个不使用语法扩展,另一个使用语法扩展。
在第一个文件(没有语法扩展名)中,您定义了一个类型与Yojson中使用的类似的类型,以及从多态变体转换为多态变体的函数:
type t =
| Bool of ...
| ...
let to_yojson x =
match x with
| Bool v -> `Bool v
| ...
let from_yojson x =
match x with
| `Bool v -> Bool v
| ...
这样,您可以使用语法扩展在代码中操作此新类型,而无需使用反引号,然后使用转换函数调用Yojson。翻译需要付费,但如果是这种情况,则应选择修改语法扩展名。