我对OCaml还不太熟悉,但我很好奇是否可以使用以下类型声明:
type some_type = {
list_of_things: {
amount: integer;
date: string;
} list;
};;
我确定我做错了什么,但只是想知道。谢谢!
(这句话涉及个人疑问,需要根据上下文理解具体意思)嵌套结构是完全可行的,但记录类型需要在使用之前定义:
type transaction = {
amount: integer;
date: string;
}
type some_type = {
list_of_things: transaction list;
}
其中一个原因是OCaml类型系统是名义上的(除了对象系统和模块系统):类型是由它们的名称定义的,而不是由它们的内容定义的。因此,需要在某个地方定义即命名列表list_of_things
元素的类型。
还可以完全定义相互递归的记录:
type transaction = {
amount: integer;
date: string;
other: some_type
}
and some_type = {
list_of_things: transaction list;
}
从OCaml 4.03开始,也可以在和sum类型定义中定义内联记录类型,例如:
type tree = Leaf | Node of { left:tree; right:tree}
然而,内联记录并非完全的一等公民,因为它们缺乏一个适当的名称,无法在其构造函数之外使用。