2017-02-01 3 views
0

저는 clojure의 초보자입니다. 그러니 나와 함께하시기 바랍니다.clojure - 매크로 내에서 맵을 파괴하는 데 문제가 있습니다.

도록 매크로 작성 :

`(let [query# (:query-params ~'+compojure-api-request+) 
     options# (select-keys query# [:sort-by :from :to])]) 
let 블록

첫 줄 destructures query-paramshttp request들 -이 구성이 생성

{sort-by billing-account/name, from 0, to 10, payment-due , payment-method , search }

과 수고가 제 함께 줄을 - 내가 select-keys 사용할 때 빈지도를 반환하지만, 내가 예를 들어 (first query#) 말할 때 - 출력은 다음과 같습니다 : [sort-by billing-account/name]

누구나 select-keys이 작동하지 않는 이유를 설명해주세요.

P. 시도했다 (get query# :from) & (:from query#) - 거기도 행운이 없다.

UPD

키 문자열이 아닌 키워드했다 - 키가 잘 작동 따라서 문자열을 사용. 그런데

+0

지도의 키가 키워드이고 기호 또는 문자열이 아닌 것은 확실합니까? – Lee

+0

@Lee는 내 질문을 편집했습니다. 예, 기호였습니다. – Sasha

답변

1

, 당신은 또한 :strs와 destructure 문자열 키는 수

(let [m {"sort-by" "billing-account/name", 
     "from" "0", 
     "to" "10", 
     "payment-due" nil, 
     "payment-method", "search"} 
     {:strs [sort-by from to payment-due payment-method]} m] 
    (println sort-by from to payment-due payment-method)) 

;;=> billing-account/name 0 10 nil search  

destructuring 구문에 대해 https://clojure.org/guides/destructuring를 참조하십시오.

0

키워드, 기호 및 문자열의 차이로 인해 혼란 스럽다고 생각합니다. 귀하의 의견에 당신은 그들이 기호라고하지만, 편집에서 당신은 그들이 문자열이라고.

당신은 차이를 읽어해야합니다 인터넷에서 오는 물건 있지만

관용적 것은 일반적으로 맵의 키와 같은 키워드를 사용하는 것을 선호하는 것입니다, (json, http 헤더 등)은 때때로 모든 문자열입니다.

질문에 직접 대답하려면 select-keys에 전달 된 키가지도의 값과 동일해야합니다 (이 경우 = 기능 사용).이 경우 동일한 유형이어야합니다.

;; For example 

(select-keys {'foo 1 'bar 2} ['foo]) ;=> {foo 1} 

(select-keys {:foo 1 :bar 2} [:foo]) ;=> {:foo 1} 

(select-keys {"foo" 1 "bar" 2} ["foo"]) ;=> {"foo" 1} 

또한 매크로가 필요하다는 질문에 일반 함수가 작동하지 않는 이유가 있습니까?

+0

안녕하세요, 답장을 보내 주셔서 감사합니다. 혼란스럽지 않고 잘못 입력 한 경우 댓글을 수정 해 보았지만 허락하지 않았습니다 .--( – Sasha