我想用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
答案 0 :(得分:2)
这是由于参数condp
传递给contains?
的顺序的原因-它将关键字作为第一个参数传递。如果您创建一个交换参数顺序的匿名函数,它将执行您想要的操作:
user=> (def xx {:symbols #{:a :b}})
user=> (condp #(contains? %2 %1) (:symbols xx) :a (prn "yes"))
"yes"
nil
这是condp
文档字符串中的相关行,解释了该参数顺序的行为:
对于每个子句,都会评估(pred test-expr expr)。