Почему (condp содержит? (: Символы xx): a (prn "yes")) дать содержит? не поддерживается для типа: clojure.lang.Keyword ошибка? - PullRequest
1 голос
/ 28 марта 2019

Я хочу использовать condp для проблемы.

Это то, что я пытаюсь проверить с помощью condp.

(def xx {:symbols {:a 1}})

(contains? (:symbols xx) :a)

true

Но я получаю эту ошибку

(condp contains? (:symbols xx) :a (prn "yes"))

IllegalArgumentException contains? not supported on type:     
clojure.lang.Keyword  clojure.lang.RT.contains

1 Ответ

2 голосов
/ 28 марта 2019

Это происходит из-за порядка передачи аргументов contains? по condp - в качестве первого аргумента передается ключевое слово. Если вы создаете анонимную функцию, которая меняет порядок аргументов, она будет делать то, что вы хотите:

user=> (def xx {:symbols #{:a :b}})
user=> (condp #(contains? %2 %1) (:symbols xx) :a (prn "yes"))
"yes"
nil

Это соответствующая строка из строки документа condp, объясняющая поведение порядка аргументов:

Для каждого предложения оценивается (pred test-expr expr).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...