我的代码中有以下类型定义:
type tag =
| Head
| Title
| Body
| H1
| P;;
type domtree =
| Empty
| Node of tag * string * domtree list;;
我需要打印标签和字符串。但我找不到任何方法将标记(第一个类型定义中的构造函数名称)转换为字符串并将它们与domtree的字符串部分连接起来。有没有具体的方法来做到这一点? OCaml是否提供了将非内置类型转换为字符串的方法?我在这里发现了一个类似的问题,但我不太明白。
答案 0 :(得分:6)
在OCaml中没有内置这样的工具,您需要自己编写转换函数tag_to_string : tag -> string
。
很容易自动生成此字符串的主体,例如,使用此sed
单行:
sed -e 's/\| \(.*\)/| \1 -> "\1"/'
并将标记定义粘贴到其标准输入中。它产生
| Head -> "Head"
| Title -> "Title"
| Body -> "Body"
| H1 -> "H1"
| P;; -> "P;;"
,您只需清理;;
。
还有很多其他解决方案来定义这个样板代码,我也喜欢使用Emacs宏。