2012-04-25 29 views
9

có cách nào khác để làm điều này không? Tôi đang cố gắng để làm mô hình kết hợp của mộtOCaml - Mẫu khớp với tham chiếu danh sách trong một bộ tóan

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

cách duy nhất tôi tìm thấy đã làm điều này:

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

Sẽ không có thể là một cách để phù hợp với a với cái gì khác muốn. ..

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

... hoặc một cái gì đó tương tự? Trong ví dụ này, nó không có vẻ nặng nề khi thực hiện một kết hợp khác, nhưng trong trường hợp thực tế nó có thể là ...

Cảm ơn câu trả lời của bạn.

Trả lời

11

Loại ref được định nghĩa là một kỷ lục với một lĩnh vực có thể thay đổi:

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

Điều này có nghĩa rằng bạn có thể mô hình trận đấu với nó bằng cách sử cú pháp kỷ lục như thế này:

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

(Ồ, chúng tôi hoàn toàn đồng bộ hóa.) –

11

Trong OCaml một ref là một bản ghi bí mật với một trường có thể thay đổi được đặt tên là contents.

match a with 
| _, { contents = (c, n) :: t } -> (* Do something *) 
Các vấn đề liên quan