2012-09-25 14 views

cevap

25

çok fonksiyonlar için :as gibi çalışır görünüyor:

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}} 

ile

(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]} 

vector ile bu müthiş blog yazısı bakınız: fn, ben izin inanmak http://blog.jayfields.com/2010/07/clojure-destructuring.html

+3

, vb, tüm kullanmak s ame yıkıcı sözdizimi. – JohnJ

+0

@JohnJ: Evet, yıkıcı semantikleri tutarlı hale getirmek için. – Ankur

+0

@JohnJ Bu "doğru". İlk başta blog yayınında kafam karışmıştı çünkü sadece örnekler olarak kullanabiliyor. Let ve fn/defn arasındaki fark, bir bağlayıcı form kullanmasıdır. –