OCaml: оставить поля в записях неопределенными?
Вопрос
У меня есть этот тип записи:
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
, я не думаю, что вы можете сделать это самостоятельно.)
Вам придется либо заполнить все поля самостоятельно (и использовать пустой список []
, либо что-то подобное для значений, которые вам не нужны), либо использовать ранее существующее значение этого типа и используйте синтаксис обновления записи, чтобы создать новую запись с измененными полями, которые вам нужны, а остальные скопировать из существующей записи.