2012-04-25 13 views
9

c'è un modo più pulito per fare ciò? Sto cercando di fare pattern matching di unOCaml - Modello che corrisponde al riferimento elenco in una tupla

(a' option * (char * nodeType) list ref

l'unico modo che ho trovato stava facendo questo:

match a with 
| _, l -> match !l with 
    | (c, n)::t -> doSomething 

Non Ci sarebbe un modo per abbinare a con qualcos'altro come. ..

match a with 
| _, ref (c,n)::t -> doSomething 

... o qualcosa di simile? In questo esempio non sembra pesante solo fare un altro match con, ma nel caso reale può essere un po '...

Grazie per le vostre risposte.

risposta

11

Il tipo ref è definito come un record con un campo mutabile:

type 'a ref = { 
    mutable contents : 'a; 
} 

Ciò significa che è possibile pattern match contro di essa usando la sintassi disco come questo:

match a with 
| _, { contents = (c,n)::t } -> doSomething 
+5

(Wow, siamo completamente sincronizzati.) –

11

In OCaml un ref è segretamente un record con un campo mutabile chiamato contents.

match a with 
| _, { contents = (c, n) :: t } -> (* Do something *) 
Problemi correlati