2010-07-01 24 views
8

Giả sử rằng tôi có một vectơ các cặp khóa-giá trị mà tôi muốn đưa vào bản đồ.Cách thành ngữ nhất để truyền vectơ cho var-args trong clojure là gì?

(def v [k1 v1 k2 v2]) 

tôi làm việc này:

(apply assoc (cons my-map v)) 

Và trên thực tế, tôi đã tìm thấy bản thân mình làm mô hình này,

(apply some-function (cons some-value some-seq)) 

nhiều lần trong vài ngày qua. Là thành ngữ này, hoặc là có một cách đẹp hơn để di chuyển các chuỗi đối số thành các hàm?

Trả lời

10

apply lấy thêm đối số giữa tên hàm và đối số seq cuối cùng.

user> (doc apply) 
------------------------- 
clojure.core/apply 
([f args* argseq]) 
    Applies fn f to the argument list formed by prepending args to argseq. 

Đó là ý nghĩa của số args*. Vì vậy, bạn có thể làm điều này:

user> (apply assoc {} :foo :bar [:baz :quux]) 
{:baz :quux, :foo :bar} 
user> (apply conj [] :foo :bar [:baz :quux]) 
[:foo :bar :baz :quux] 
+0

Ahh, đúng rồi. Tôi biết tôi đã thiếu một cái gì đó. Cảm ơn, Brian. –

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