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