OCaml: Deixando campos em registros indefinido?
Pergunta
Eu tenho esse tipo de registro:
type syllable = {onset: consonant list; nucleus: vowel list; coda: consonant list};;
E se eu quiser para instanciar uma sílaba onde apenas o núcleo é definido? Posso dar-lhe um valor padrão? Será que o padrão para [] ou algo assim?
Solução
Eu acho que é uma idéia melhor para usar campos "opcionais".
type syllable = {onset: consonant list option; nucleus: vowel list option; coda: consonant list option};;
Dessa forma, você pode definir o que você precisa.
{onset = Some [consonant, consonant, ...],
nucleus = None,
coda = Some [consonant, consonant, consonant, ...]}
I pensar que é a sintaxe.
Outras dicas
Só para ter a resposta de newacct mais clara, aqui está um exemplo
let default_syllable = { onset = []; nucleus = []; coda = [] }
let choose_only_nucleus nucleus =
{ default_syllable with nucleus = nucleus }
Não, eu não acho que você pode deixar as coisas indefinidas. valores não inicializadas causar todo tipo de problemas em linguagens como C e assim evita-se em OCaml. (Embora haja algumas funções da biblioteca padrão que deixa algumas coisas indefinidos, como String.create
, eu não acho que você pode fazê-lo sozinho.)
Você teria que quer preencher todos os campos si mesmo (e usar o []
lista vazia ou algo parecido para valores que não se preocupam com), ou use um valor pré-existente deste tipo e usar a atualização de registro sintaxe para criar um novo registro com os campos que se preocupam mudou, e os outros copiada do registro pré-existente.