OCaml: Laisser des champs dans les enregistrements non définis?
Question
J'ai ce type d'enregistrement:
type syllable = {onset: consonant list; nucleus: vowel list; coda: consonant list};;
Et si je veux instancier une syllabe où seul le noyau est défini? Puis-je lui donner une valeur par défaut? Est-ce que par défaut est [] ou quelque chose comme ça?
La solution
Je pense que c'est une meilleure idée d'utiliser "facultatif". champs.
type syllable = {onset: consonant list option; nucleus: vowel list option; coda: consonant list option};;
Ainsi, vous pourrez définir ce dont vous avez besoin.
{onset = Some [consonant, consonant, ...],
nucleus = None,
coda = Some [consonant, consonant, consonant, ...]}
Je pense que ce soit la syntaxe.
Autres conseils
Juste pour clarifier la réponse de newacct, voici un exemple
let default_syllable = { onset = []; nucleus = []; coda = [] }
let choose_only_nucleus nucleus =
{ default_syllable with nucleus = nucleus }
Non, je ne pense pas que vous puissiez laisser les choses indéfinies. Les valeurs non initialisées causent toutes sortes de problèmes dans des langages tels que C et sont donc évitées dans OCaml. (Bien que la bibliothèque standard comporte quelques fonctions laissant certaines choses indéfinies, telles que String.create
, je ne pense pas que vous puissiez le faire vous-même.)
Vous devez soit remplir tous les champs vous-même (et utiliser la liste vide []
, ou quelque chose comme ça pour les valeurs qui ne vous intéressent pas), ou utiliser une valeur préexistante. de ce type et utilisez la syntaxe de mise à jour de l'enregistrement pour créer un nouvel enregistrement avec les champs qui vous intéressent modifiés et les autres copiés à partir de l'enregistrement préexistant.