Il metodo tradizionale per ottenere il valore all'interno di qualsiasi tipo di costruttore in OCaml è l'abbinamento di motivi. L'abbinamento di pattern è la parte di OCaml che può essere più diversa da quella che hai già visto in altri linguaggi, quindi ti consiglio di non scrivere solo programmi nel modo in cui sei abituato (ad esempio aggirare il problema con ocaml-lib) ma provalo e vedi se ti piace.
let contents =
match z with
Some c -> c;;
variabile contents
è assegnato 3
, ma si ottiene un avvertimento:
Attenzione 8: questo pattern-matching non è esaustivo. Ecco un esempio di un valore che non è compensata: Nessuno
Nel caso generale, non si sa che l'espressione si desidera guardare dentro è necessariamente un Some c
. Il motivo per cui è stato scelto un tipo di opzione è solitamente che a volte tale valore può essere None
. Qui il compilatore ti ricorda che non stai gestendo uno dei possibili casi.
È possibile eseguire la corrispondenza del modello "in profondità" e il compilatore continuerà a verificare se è esaustivo. Considerate questo funzione che prende un (int option) option
:
let f x =
match x with
Some (Some c) -> c
| None -> 0
;;
Qui hai dimenticato il caso Some (None)
e il compilatore ti dice così:
Attenzione 8: questo pattern-matching non è esaustivo. Ecco un esempio di un valore che non corrisponde: Nessuno Nessuno
fonte
2012-09-05 19:50:54
Si sta guardando la documentazione di ocaml-lib, una libreria di utilità opzionale per OCaml. Naturalmente non hai bisogno di quella libreria per accedere al valore all'interno di un costruttore 'Some'. –