OCaml:保留记录中未定义的字段?

OCaml:保留记录中未定义的字段?,ocaml,record,Ocaml,Record,我有这样的记录类型: type syllable = {onset: consonant list; nucleus: vowel list; coda: consonant list};; 如果我想实例化一个只定义了核心的音节呢?我可以给它一个默认值吗?它是否默认为[]或类似的值?不,我不认为可以不定义任何内容。未初始化的值在C等语言中会导致各种问题,因此在OCaml中可以避免。(虽然标准库中有一些函数未定义某些内容,例如String.create,但我认为您自己做不到。) 您必须自己填写所

我有这样的记录类型:

type syllable = {onset: consonant list; nucleus: vowel list; coda: consonant list};;

如果我想实例化一个只定义了核心的音节呢?我可以给它一个默认值吗?它是否默认为[]或类似的值?

不,我不认为可以不定义任何内容。未初始化的值在C等语言中会导致各种问题,因此在OCaml中可以避免。(虽然标准库中有一些函数未定义某些内容,例如
String.create
,但我认为您自己做不到。)


您必须自己填写所有字段(并对不关心的值使用空列表
[]
或类似的内容),或者使用此类型的预先存在的值并使用记录更新语法创建一个新记录,其中包含您关心的字段已更改,其他的是从已有的记录中复制过来的。

为了让newacct的答案更清楚,这里有一个例子

let default_syllable = { onset = []; nucleus = []; coda = [] }

let choose_only_nucleus nucleus =
   { default_syllable with nucleus = nucleus }

我认为最好使用“可选”字段

这样,你就可以定义你需要什么

{onset = Some [consonant, consonant, ...],
 nucleus = None,
 coda = Some [consonant, consonant, consonant, ...]}

我认为这就是语法。

要扩展此功能,建议您使用默认结构(如unknown(yahoo)所建议的),或者为特定字段使用选项类型。
{onset = Some [consonant, consonant, ...],
 nucleus = None,
 coda = Some [consonant, consonant, consonant, ...]}