2010-07-01 4 views
8

맵에 넣으려는 키 - 값 쌍의 벡터가 있다고 가정합니다. clojure에서 var-args에 대해 벡터를 전달하는 가장 관용적 인 방법은 무엇입니까?

(apply assoc (cons my-map v)) 

그리고 사실

, 나는 나 자신이 패턴을 일을 발견했습니다, 지난 몇 일에

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

여러 번 :

(def v [k1 v1 k2 v2]) 

나는 이런 종류의 물건을한다. 이것은 관용적입니까, 아니면 시퀀스를 함수로 변환 할 수있는 더 좋은 방법입니까?

답변

10

apply은 함수 이름과 마지막 seq 인수 사이에 추가 인수를 사용합니다.

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

이것이 바로 args*의 의미입니다. 따라서 다음 작업을 수행 할 수 있습니다.

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

아, 그게 있습니다. 나는 뭔가를 놓친다는 것을 알았다. 고마워, 브라이언. –

관련 문제