OCaml: оставить поля в записях неопределенными?

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

  •  07-07-2019
  •  | 
  •  

Вопрос

У меня есть этот тип записи:

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

Что если я захочу создать слог, в котором определено только ядро? Могу ли я дать ему значение по умолчанию? По умолчанию это [] или что-то в этом роде?

Это было полезно?

Решение

Я думаю, что лучше использовать " опционально " поля.

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