我写了一个小的匿名函数,用于map
调用。该函数返回一个包含SQL结果集查询中的列名和列值的向量。
这是函数(输入是列名):
(fn [name] [(keyword name) (.getObject resultset name)])
这很好用,但是当我尝试使用匿名函数的“简化”版本时,我收到了一个错误:
#([(keyword %) (.getObject resultset %)])
java.lang.IllegalArgumentException: Wrong number of args (0) passed to: PersistentVector
以下是map
电话:
(into {} (map (fn [name] [(keyword name) (.getObject resultset name)]) column-names))
是否可以使用此功能的简化语法?如果是这样,怎么样?
感谢。
答案 0 :(得分:24)
您的问题是,简单的语法是尝试将向量计算为函数调用。
你可以插入一个“identity”函数来使它工作,因为这只是一个简单的函数,可以不变地返回向量:
#(identity [(keyword %) (.getObject resultset %)])
答案 1 :(得分:23)
您需要使用向量功能执行此操作:
#(vector (keyword %) (.getObject resultset %))
P.S。还有地图,集等功能。
答案 2 :(得分:4)
是的,Clojure应该真的支持#[...]结构,仅适用于这种情况。
我建议将以下内容作为最佳选择:
#(vector (keyword %) (.getObject resultset %))