2011-02-07 4 views
21

map 호출과 함께 사용할 작은 익명 함수를 작성했습니다. 이 함수는 SQL 결과 집합 쿼리에서 열 이름과 열 값을 포함하는 벡터를 반환합니다.Clojure : 익명 함수에서 벡터 반환

(fn [name] [(keyword name) (.getObject resultset name)]) 

이 있지만, 잘 작동 나는 익명 함수의 "단순화 된"버전을 사용하려고 할 때, 내가 오류가 발생했습니다 :

여기

는 (입력 열 이름) 기능입니다

(into {} (map (fn [name] [(keyword name) (.getObject resultset name)]) column-names)) 

는 간결체 한자를 사용할 수있다 : 여기

#([(keyword %) (.getObject resultset %)]) 

java.lang.IllegalArgumentException: Wrong number of args (0) passed to: PersistentVector 

map 호출입니다 이 함수에 ified 구문이 있습니까? 그렇다면 어떻게?

감사합니다.

+0

좀 더 정보 : http://groups.google.com/group/clojure/browse_thread/thread/9037f31748cef0e2/62d3f3a45a139157?lnk=gst&q=를 Nick + Zbinden # 62d3f3a45a139157 – nickik

답변

24

문제는 간단한 구문이 벡터를 함수 호출로 평가하려고한다는 것입니다.

이 변경되지 않은 벡터 돌아갑니다 단순한 기능이기 때문에 당신은 그것이 작동되도록하기위한 "정체성"기능을 삽입 할 수 있습니다 : 당신은이 작업을 수행 벡터를 기능을 사용할 필요가

#(identity [(keyword %) (.getObject resultset %)]) 
+0

알렉스 오트 (Alex Ott)의 대답도 작동하지만 다른 데이터 구조에 대한 일반적인 솔루션을 제공하지만 문제가 발생하는 이유를 설명하기 때문에이 대답을 선택했습니다. 고마워. – Ralph

+0

알렉스의 제안을 반영하기 위해이 답변을 편집했는데 어떤 이유로 묵살 된 것처럼 보입니다. 오 잘. – apg

+0

필자는 왜 이상적인 솔루션이 아닌지를 보여주는 코드를 보여주는 것보다 더 이상적인 솔루션의 예를 추가했습니다. 편집을 한 이후로 가져 가지 않았습니다. – Psyllo

23

를 :

#(vector (keyword %) (.getObject resultset %)) 

추신

4

네, Clojure는 실제로이 경우에 # [...] 구문을 지원해야합니다.

나는 최선의 대안으로 다음 추천 :

#(vector (keyword %) (.getObject resultset %)) 
+2

나는 # [...]이 그것에 대한 특수한 구문을 보증하기에 충분할 것이라고는 생각하지 않는다. 그리고 일단 그것에 대해 배웠다면 거기에'벡터 '를 던지면 큰 문제가되지 않는다. – apg

+0

나는 같은'# [...]'구조를 생각했다. 어떻게 매크로를 작성할 수 있습니까? #는 독자 매크로를 의미합니까? –

+0

'# (-> [(keyword %) (.getObject resultset %)])'라고 쓸 수는 있지만,이 점은 분명치 않다. –

관련 문제