我最近刚开始编写OCaml代码,因此这可能是一个天真的问题。但我自己无法解决这个问题。
我在OCaml中有以下类型声明。
type myType =
| Int of int
现在我有一个myType类型的对象。
有没有办法访问此对象包含的int值?如果是,怎么样?
答案 0 :(得分:7)
您想要的是从联合类型的值中获取int
值。在OCaml中,我们经常使用模式匹配来分解和转换值:
let get_int v =
match v with
| Int i -> i
当您在OCaml顶层尝试该功能时,您会得到类似的内容:
# let v = Int 3;;
val v : myType = Int 3
# get_int v;;
- : int = 3
如果您的工会类型包含更多案例,您只需向get_int
个函数添加更多模式,然后以适当的方式处理它们。
对于像你的例子这样的单例联合,你可以直接对它们的值进行模式匹配:
# let (Int i) = v in i;;
- : int = 3
答案 1 :(得分:5)
您可以使用模式匹配来访问该值:
match value_of_my_type with
| Int i -> do_something_with i