是否可以在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类型”。 ?
谢谢。
答案 0 :(得分:8)
单形解:
let from_type = function
| MyType_First _ -> "MyType_First"
| MyType_Second _ -> "MyType_Second"
多态解决方案:无。 (AFAIK,对应于构造函数的词法标记不会记录在字节码/二进制文件中,即使指定了调试标志。唯一可以做的就是使用一些黑暗Obj.magic
打印构造函数的整数'标识符' 。)
答案 1 :(得分:2)
您想要的是一种更简单的通用打印形式,并且在OCaml中不可用,但是存在一些变通方法 - 例如deriving