1
我是很新,OCaml的,但我很好奇,如果像下面这样的类型声明是可能的:OCaml的嵌套结构
type some_type = {
list_of_things: {
amount: integer;
date: string;
} list;
};;
我敢肯定,我做错了什么,只是想知道。谢谢!
我是很新,OCaml的,但我很好奇,如果像下面这样的类型声明是可能的: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,也可以将之和类型的定义中定义内联的记录类型,例如:
type tree = Leaf | Node of { left:tree; right:tree}
但是,内联记录不是完全一流的,不能在其构造函数的上下文之外使用,因为它们缺少正确的名称。
这正是我一直在寻找的,谢谢! – Jay