OCaml: оставить поля в записях неопределенными?
У меня есть этот тип записи:
type syllable = {onset: consonant list; nucleus: vowel list; coda: consonant list};;
Что если я захочу создать слог, в котором определено только ядро? Могу ли я дать ему значение по умолчанию? По умолчанию это [] или что-то в этом роде?
3 ответа
Я думаю, что лучше использовать "необязательные" поля.
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
Я не думаю, что вы можете сделать это самостоятельно.)
Вы должны будете либо заполнить все поля самостоятельно (и использовать пустой список []
или что-то подобное для значений, которые вас не волнуют), или используйте уже существующее значение этого типа и используйте синтаксис обновления записи, чтобы создать новую запись с измененными полями, которые вам нужны, а остальные скопировать из предсуществующая запись.