我在OCaml中构建了两个包含相同变体类型的库.变体的细节并不太重要,除了它非常大,并且为它手动编写转换函数会很烦人.(它实际上是使用ocamlidl从C转换的bfd_architecture枚举).
我现在正在使用这两个库编写程序.特别是,我正在调用Af,它返回一个A.variant_type的值,我需要在调用Bg时使用该值,它将B.variant_type的值作为输入.
有没有办法告诉OCaml A.variant_type和B.variant_type实际上是同一类型,因此可以将值从一个转换为另一个?这些库是独立的,因此它们不应该相互引用.现在我正在使用Obj.magic进行转换,但这是一个黑客攻击.
你不必使用Obj.magic,尽管你确实必须使用一些“魔法”,
external convertAB : A.t -> B.t = "%identity"
external convertBA : B.t -> A.t = "%identity"
Run Code Online (Sandbox Code Playgroud)
足以进行转换。当然,我理解你的担忧;两种类型必须完全相同,否则您将处理运行时错误。如果可能且相关,将这些变体转换为多态变体将解决问题。
| 归档时间: |
|
| 查看次数: |
400 次 |
| 最近记录: |