Clojure:从匿名函数返回一个向量

时间:2011-02-07 12:57:13

标签: clojure anonymous-function

我写了一个小的匿名函数,用于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))

是否可以使用此功能的简化语法?如果是这样,怎么样?

感谢。

3 个答案:

答案 0 :(得分:24)

您的问题是,简单的语法是尝试将向量计算为函数调用。

你可以插入一个“identity”函数来使它工作,因为这只是一个简单的函数,可以不变地返回向量:

#(identity [(keyword %) (.getObject resultset %)])

答案 1 :(得分:23)

您需要使用向量功能执行此操作:

#(vector (keyword %) (.getObject resultset %))

P.S。还有地图,集等功能。

答案 2 :(得分:4)

是的,Clojure应该真的支持#[...]结构,仅适用于这种情况。

我建议将以下内容作为最佳选择:

#(vector (keyword %) (.getObject resultset %))