2012-09-25 27 views

Trả lời

25

Có vẻ như :as công trình cho các chức năng quá:

với vector

(defn test [[x y :as v]] 
    {:x x :y y :v v}) 

(test [1 2 3 4]) 
=> {:x 1 :y 2 :v [1 2 3 4]} 

với hash-map

(defn test2 [{x :x y :y :as m}] 
    {:x x :y y :m m}) 

(test2 {:x 1 :y 2 :z 3}) 
=> {:x 1 :y 2 :m {:x 1 :y 2 :z 3}} 

Xem bài đăng blog tuyệt vời: http://blog.jayfields.com/2010/07/clojure-destructuring.html

+3

Tôi tin rằng chúng ta hãy, fn, defn, vv tất cả sử dụng s ame destructuring cú pháp. – JohnJ

+0

@JohnJ: Vâng, để làm cho ngữ nghĩa hủy diệt nhất quán. – Ankur

+0

@JohnJ Đó là "đúng". Tôi đã rất bối rối tại bài đăng blog lúc đầu bởi vì nó chỉ sử dụng cho phép làm ví dụ. Sự khác biệt giữa let và fn/defn là nó sử dụng một hình thức ràng buộc. –

Các vấn đề liên quan