我正在关注此示例:http://groups.google.com/group/clojure/browse_thread/thread/99b3d792b1d34b56
(见最后的回复)
这是我得到的神秘错误:
Clojure 1.2.1
user=> (def m {:a "x" :b "y" :c "z" :d "w"})
#'user/m
user=> (filter #(some % [:a :b]) m)
java.lang.IllegalArgumentException: Key must be integer
(user=>
Run Code Online (Sandbox Code Playgroud)
我也不明白为什么这会起作用.是不是(某些......)每次都会返回第一个匹配值"x"?我是一个完全没人参加clojure并且只是想学习.
请赐教.
Kev*_*vin 29
我想我只需要阅读更多的文档:
(select-keys m [:a :b])
Run Code Online (Sandbox Code Playgroud)
虽然我仍然不确定我发现的例子意图是什么......
如果您在地图上"迭代",您将获得键值对而不是键.例如,
user=> (map #(str %) {:a 1, :b 2, :c 3})
("[:a 1]" "[:b 2]" "[:c 3]")
Run Code Online (Sandbox Code Playgroud)
因此,您的匿名函数会尝试评估(some [:a "x"] [:a :b])哪些明显不起作用.
意识形态的解决方案是使用select-keys另一个答案中提到的.