OCaml:获取值的类型名称

时间:2011-09-11 19:42:21

标签: ocaml

是否可以在OCaml中打印值的名称,例如,如果我有

type my_type =
  | MyType_First of int
  | MyType_Second of string

然后执行以下操作:

let my_value = MyType_First 0 in
print_string ("my_value is of type " ^ String.from_type my_value ^ ".\n";

我可以得到“my_value属于MyType_First类型”。 ?

谢谢。

2 个答案:

答案 0 :(得分:8)

单形解:

let from_type = function
  | MyType_First _ -> "MyType_First"
  | MyType_Second _ -> "MyType_Second"

多态解决方案:无。 (AFAIK,对应于构造函数的词法标记不会记录在字节码/二进制文件中,即使指定了调试标志。唯一可以做的就是使用一些黑暗Obj.magic打印构造函数的整数'标识符' 。)

答案 1 :(得分:2)

您想要的是一种更简单的通用打印形式,并且在OCaml中不可用,但是存在一些变通方法 - 例如deriving