정규화 된 키워드가있는 키를 사용하는 Clojure 구조 해제 맵이 작동하지 않습니다.

프랭크 C.

나는 1.7.0과 1.8.0 모두에서 이것을 시도했으며 Clojure는 :keys키가 완전한 키를 사용하여 맵을 분해하지 않는 것으로 보입니다 . 함수 인수 위치를 바꿀 때도 작동하지 않기 때문에 인수의 꼬리에있는 것과 관련이 없다고 생각합니다.

(ns foo.sandbox)

(def foo ::foo)
(def bar ::bar)

(defn normalize-vals
  [mmap & [{:keys [foo bar] :as ops}]]
  (println "normalize-vals " ops " and foo " foo " bar" bar))

(normalize-vals {} {foo 1 bar 2})

=> normalize-vals  {:foo.sandbox/foo 1, :foo.sandbox/bar 2}  and foo  nil  bar  nil

하나; 이것은 작동합니다 :

    (defn normalize-vals
      [mmap & [{a foo b bar :as ops}]]
      (println "normalize-vals " ops " and foo " a " bar" b))

    (normalize-vals {} {foo 1 bar 2})

=> normalize-vals  {:cmt.sandbox/foo 1, :cmt.sandbox/bar 2}  and foo  1  bar  2

이것이 결함입니까?

Symfrog

정규화되지 않은 키워드를 사용하여 구조를 해제하므로 다음 대신 :

[mmap & [{:keys [foo bar] :as ops}]]

당신은 사용해야합니다

[mmap & [{:keys [::foo ::bar] :as ops}]]

다음 clojure.walk/macroexpand-all을 확장 하는 사용할 수 있습니다 normalize-vals.

(clojure.walk/macroexpand-all '(defn normalize-vals
                                 [mmap & [{:keys [foo bar] :as ops}]]
                                 (println "normalize-vals " ops " and foo " foo " bar" bar)))

=> (def normalize-vals (fn* ([mmap & p__26720] (let* [vec__26721 p__26720 map__26722 (clojure.core/nth vec__26721 0 nil) map__26722 (if (clojure.core/seq? map__26722) (. clojure.lang.PersistentHashMap create (clojure.core/seq map__26722)) map__26722) ops map__26722 foo (clojure.core/get map__26722 :foo) bar (clojure.core/get map__26722 :bar)] (println "normalize-vals " ops " and foo " foo " bar" bar)))))

주목할 확장의 중요한 부분은 다음과 같습니다.

foo (clojure.core/get map__26722 :foo) 
bar (clojure.core/get map__26722 :bar)

따라서 맵 디스트 럭처링의 키는 컴파일 타임 에 키워드로 변환되고 네임 스페이스의 foo 및 bar var의 값은 사용되지 않습니다.

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

분류에서Dev

키워드가 동기화 된 Spring @Transactional이 작동하지 않습니다.

분류에서Dev

키보드 단축키에 지정된 삭제 키가 이제 작동하지 않습니다.

분류에서Dev

키보드 단축키에 지정된 삭제 키가 이제 작동하지 않습니다.

분류에서Dev

사용자 지정 구독 규칙을 사용하는 NServiceBus가 "SQL 필터가 구독 된 이벤트 유형과 일치하지 않습니다"오류를 발생시키지 않도록하려면 어떻게해야합니까?

분류에서Dev

구조화 된 데이터 구조를 구성하는 파이썬 정규식

분류에서Dev

'this'키워드를 사용하는 이벤트 처리기가 예상대로 작동하지 않습니다.

분류에서Dev

동일한 네트워크에 대해 구성된 경우 두 개의 네트워크 카드가 작동하지 않는 이유는 무엇이며이 문제를 해결할 수 있습니까?

분류에서Dev

DNS 쿼리는 FQDN (정규화 된 도메인 이름)에 대해서만 작동하지만 짧은 이름은 작동하지 않습니다.

분류에서Dev

참조 된 테이블 "사용자"에 대해 지정된 키와 일치하는 고유 제약 조건이 없습니다 (PostgreSQL).

분류에서Dev

free ()를 사용하여 구조의 요소가 차지하는 메모리를 해제하려고하지만 작동하지 않습니다.

분류에서Dev

작동하지 않는 사용자 메서드 추가 : " 'User'키워드 근처의 잘못된 구문

분류에서Dev

사용자 정의 노드 패키지는 이름이 지정된 내보내기를 제공하지 않습니다.

분류에서Dev

XML 키 제약 조건은 ref를 사용하는 요소에서 작동하지 않습니다.

분류에서Dev

Python을 사용하는 로봇 프레임 워크 키워드 : 일치하지 않는 문자열 또는 IP에 오류가 있습니다. 이 문제를 해결하는 방법?

분류에서Dev

작동하지 않는 문제 수정 : 교차 사이트 리소스와 연결된 쿠키가`SameSite` 속성없이 설정되었습니다.

분류에서Dev

각 값의 키에 해당하는 값 제약 조건이있는 Typescript 맵을 정의 할 수 있습니까?

분류에서Dev

변경된 패키지 이름이 제대로 작동하지 않습니다.

분류에서Dev

`super ()`키워드가 목록 이해에서 제대로 작동하지 않습니다.

분류에서Dev

QuickSort가 작동하지 않습니다. 스왑이 문제라고 생각합니다. 면책 조항 제공된 quicksort 방법을 사용해야합니다.

분류에서Dev

안녕하세요, django 앱에 문제가 있습니다. 이 URL : url / user / id를 사용하여 사용자를위한 개인화 된 페이지를 만들고 싶습니다. 하지만 뭔가 작동하지 않습니다

분류에서Dev

함수를 만드는 동안 'FUNCTION'키워드 근처에 잘못된 구문이 있습니다.

분류에서Dev

이 " '사이'키워드 근처의 잘못된 구문"을 사이를 사용하는 SQL Server 쿼리로 가져 오는 이유는 무엇입니까?

분류에서Dev

File :: Exists를 사용하는 조건이 작동하지 않습니다.

분류에서Dev

전체 페이지를 다시로드하지 않고 Enter 키로 제출 된 번호를 가져 오는 데 문제가 있습니다.

분류에서Dev

scrollview 아래에서 키보드 textview를 해제하기 위해 touchesbegan이 작동하지 않습니다.

분류에서Dev

"new"키워드를 사용할 때 생성 된 객체가 동일한 객체를 참조하는 이유는 무엇입니까?

분류에서Dev

Scrollview가 제대로 작동하지 않습니다. 입력 키보드를 위로 올리면 화면이 스크롤되지 않습니다.

분류에서Dev

Win 8.1 드라이버 재해를 수정하는 솔루션이 있습니까? (키보드 작동 중지)

분류에서Dev

Clojure : 일부를 사용하여 구조화 된 값이 아닌 전체 항목을 반환합니다.

Related 관련 기사

  1. 1

    키워드가 동기화 된 Spring @Transactional이 작동하지 않습니다.

  2. 2

    키보드 단축키에 지정된 삭제 키가 이제 작동하지 않습니다.

  3. 3

    키보드 단축키에 지정된 삭제 키가 이제 작동하지 않습니다.

  4. 4

    사용자 지정 구독 규칙을 사용하는 NServiceBus가 "SQL 필터가 구독 된 이벤트 유형과 일치하지 않습니다"오류를 발생시키지 않도록하려면 어떻게해야합니까?

  5. 5

    구조화 된 데이터 구조를 구성하는 파이썬 정규식

  6. 6

    'this'키워드를 사용하는 이벤트 처리기가 예상대로 작동하지 않습니다.

  7. 7

    동일한 네트워크에 대해 구성된 경우 두 개의 네트워크 카드가 작동하지 않는 이유는 무엇이며이 문제를 해결할 수 있습니까?

  8. 8

    DNS 쿼리는 FQDN (정규화 된 도메인 이름)에 대해서만 작동하지만 짧은 이름은 작동하지 않습니다.

  9. 9

    참조 된 테이블 "사용자"에 대해 지정된 키와 일치하는 고유 제약 조건이 없습니다 (PostgreSQL).

  10. 10

    free ()를 사용하여 구조의 요소가 차지하는 메모리를 해제하려고하지만 작동하지 않습니다.

  11. 11

    작동하지 않는 사용자 메서드 추가 : " 'User'키워드 근처의 잘못된 구문

  12. 12

    사용자 정의 노드 패키지는 이름이 지정된 내보내기를 제공하지 않습니다.

  13. 13

    XML 키 제약 조건은 ref를 사용하는 요소에서 작동하지 않습니다.

  14. 14

    Python을 사용하는 로봇 프레임 워크 키워드 : 일치하지 않는 문자열 또는 IP에 오류가 있습니다. 이 문제를 해결하는 방법?

  15. 15

    작동하지 않는 문제 수정 : 교차 사이트 리소스와 연결된 쿠키가`SameSite` 속성없이 설정되었습니다.

  16. 16

    각 값의 키에 해당하는 값 제약 조건이있는 Typescript 맵을 정의 할 수 있습니까?

  17. 17

    변경된 패키지 이름이 제대로 작동하지 않습니다.

  18. 18

    `super ()`키워드가 목록 이해에서 제대로 작동하지 않습니다.

  19. 19

    QuickSort가 작동하지 않습니다. 스왑이 문제라고 생각합니다. 면책 조항 제공된 quicksort 방법을 사용해야합니다.

  20. 20

    안녕하세요, django 앱에 문제가 있습니다. 이 URL : url / user / id를 사용하여 사용자를위한 개인화 된 페이지를 만들고 싶습니다. 하지만 뭔가 작동하지 않습니다

  21. 21

    함수를 만드는 동안 'FUNCTION'키워드 근처에 잘못된 구문이 있습니다.

  22. 22

    이 " '사이'키워드 근처의 잘못된 구문"을 사이를 사용하는 SQL Server 쿼리로 가져 오는 이유는 무엇입니까?

  23. 23

    File :: Exists를 사용하는 조건이 작동하지 않습니다.

  24. 24

    전체 페이지를 다시로드하지 않고 Enter 키로 제출 된 번호를 가져 오는 데 문제가 있습니다.

  25. 25

    scrollview 아래에서 키보드 textview를 해제하기 위해 touchesbegan이 작동하지 않습니다.

  26. 26

    "new"키워드를 사용할 때 생성 된 객체가 동일한 객체를 참조하는 이유는 무엇입니까?

  27. 27

    Scrollview가 제대로 작동하지 않습니다. 입력 키보드를 위로 올리면 화면이 스크롤되지 않습니다.

  28. 28

    Win 8.1 드라이버 재해를 수정하는 솔루션이 있습니까? (키보드 작동 중지)

  29. 29

    Clojure : 일부를 사용하여 구조화 된 값이 아닌 전체 항목을 반환합니다.

뜨겁다태그

보관