OCaml:レコードのフィールドを未定義のままにしますか?

StackOverflow https://stackoverflow.com/questions/1424917

  •  07-07-2019
  •  | 
  •  

質問

このレコードタイプがあります:

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

核のみが定義されている音節をインスタンス化する場合はどうなりますか?デフォルト値を指定できますか?デフォルトは[]またはそのようなものですか?

役に立ちましたか?

解決

" optional"を使用することをお勧めします。フィールド。

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, ...]}

私は考える構文です。

他のヒント

newacctの答えを明確にするために、ここに例を示します

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

let choose_only_nucleus nucleus =
   { default_syllable with nucleus = nucleus }

いいえ、物事を未定義のままにしておくことはできないと思います。初期化されていない値は、Cなどの言語であらゆる種類の問題を引き起こすため、OCamlでは回避されます。 (標準ライブラリには、 String.create のように未定義の機能がいくつかありますが、自分でできるとは思いません。)

すべてのフィールドに自分で入力するか(気にならない値には空のリスト [] などを使用する)、または既存の値を使用する必要があります。このタイプのレコード更新構文を使用して、関心のあるフィールドが変更された新しいレコードを作成し、他のフィールドは既存のレコードからコピーします。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top