如何无需重复代码,基于已有OCaml变体类型扩展新构造器?
OCaml扩展变体类型:无需重复构造器的实现方法
OCaml原生变体类型不支持直接扩展已有变体的构造器,但可以通过包装原有类型的方式,避免重复编写原构造器代码,实现需求。
具体实现示例
原类型定义:
type foo = | A | B of string
定义包含foo所有构造器并新增C的bar类型:
type bar = | Foo of foo (* 用一个构造器包装原foo的所有变体 *) | C of float * int
使用方式
- 原
foo的构造器通过Foo包裹使用:let example1 : bar = Foo A let example2 : bar = Foo (B "hello world") - 新增的构造器直接使用:
let example3 : bar = C (3.14, 42)
优化使用体验(可选)
如果觉得每次写Foo麻烦,可以定义辅助函数简化调用:
let a : bar = Foo A let b s : bar = Foo (B s) // 调用时更简洁 let simplified_example1 = a let simplified_example2 = b "test"
内容的提问来源于stack exchange,提问作者c-x-berger
相关产品推荐
相关产品推荐

