5

我有这个记录类型:

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

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

4

3 回答 3

7

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

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

let choose_only_nucleus nucleus =
   { default_syllable with nucleus = nucleus }
于 2009-09-16T01:19:27.570 回答
4

不,我不认为你可以留下未定义的东西。未初始化的值在 C 等语言中会导致各种问题,因此在 OCaml 中可以避免这种情况。(虽然标准库中有一些函数没有定义一些东西,比如String.create,但我认为你不能自己做。)

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

于 2009-09-15T03:55:55.313 回答
1

我认为使用“可选”字段是一个更好的主意。

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

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

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

认为这就是语法。

于 2010-09-06T17:22:38.230 回答