【发布时间】:2017-03-24 20:53:02
【问题描述】:
我是 OCaml 的新手,正在尝试加入一个大型 OCaml 项目。在跟踪构成其他类型的类型时,我试图思考如何使用它们,所以我将其分解为一个小例子,我认为它与大型项目中的情况非常接近。
如果我有由三个字段组成的记录类型expression:
type expression = {e_id:int; e_node:exp_node; e_loc:location}
and exp_node =
| Const of int
| Lval of lval
| SizeofStr of string
and lval =
| Var of varinfo
| Mem of expression
and location = {x:int; y:int}
and varinfo = {vname:string; vorigname:string}
如果e_node 字段是整数,我可以绑定这种类型的变量:
let exp_const = {e_id=10;
e_node= Const 10;
e_loc={x=10; y=10}}
现在,如果我希望 e_node 字段属于 Lval 类型,即记录类型 lval,我不知道该怎么做。我试过了:
let exp_lval_var =
{e_id=11;
e_node= {vname="int_val"; vorigname="int_val1"};
e_loc={x=10; y=20}}
但它说This expression has type varinfo but an expression was expected of type exp_node。但如果你按照类型,它就是!?
我在这里没有正确定义类型吗?还是我没有正确使用类型?我真的找不到更多使用 OCaml 类型的复杂示例。如有任何建议,我们将不胜感激。
【问题讨论】: