【发布时间】:2011-11-04 16:03:52
【问题描述】:
我正在关注这个例子: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=>
我也不明白为什么这会起作用。 (some ...) 不是每次都会返回第一个匹配值“x”吗?我是clojure的菜鸟,只是想学习。
请赐教。
【问题讨论】:
-
您链接到的 ggroup 线程中的代码解决了一个不同的问题:“给定 一组 映射和一组键,返回给定的精确集合包含至少一个给定键的映射”。因此,在此代码中,
filter旨在对一组地图进行操作,而不是对单个地图进行操作;并且这个涉及some的特定#(...)块仅在给定映射不包含nil或false值时才适用(如线程中所述),但无论如何,它将应用它返回的函数(懒惰地)依次到每个给定的地图。 -
好的,这解释了我的误解,谢谢。
标签: clojure