2012-04-25 111 views
9

有沒有更乾淨的方法?我試圖做的,我發現一個OCaml - 與元組中的列表引用進行模式匹配

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

的唯一途徑模式匹配是這樣:

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

會不會有一種方法來匹配a別的東西一樣。 ..

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

...或類似的東西?在這個例子中,它看起來並不重要,只是做了另一場比賽,但在實際情況下,它可能有點...

感謝您的回答。

回答

11

ref類型被定義爲具有一個可變字段的記錄:

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

這意味着可以針對它的模式匹配使用這樣記錄語法:

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

(哇,我們完全同步) – 2012-04-25 04:00:19

11

在OCaml中一個ref祕密地是一個名爲contents的可變字段的記錄。

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