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

Ral*_*lph 21 clojure anonymous-function

我写了一个小的匿名函数用于map调用.该函数返回一个包含SQL结果集查询中的列名和列值的向量.

这是函数(输入是列名):

(fn [name] [(keyword name) (.getObject resultset name)])
Run Code Online (Sandbox Code Playgroud)

这工作正常,但是当我尝试使用匿名函数的"简化"版本时,我收到一个错误:

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

java.lang.IllegalArgumentException: Wrong number of args (0) passed to: PersistentVector
Run Code Online (Sandbox Code Playgroud)

这是map电话:

(into {} (map (fn [name] [(keyword name) (.getObject resultset name)]) column-names))
Run Code Online (Sandbox Code Playgroud)

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

谢谢.

mik*_*era 25

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

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

#(identity [(keyword %) (.getObject resultset %)])
Run Code Online (Sandbox Code Playgroud)


Ale*_*Ott 23

您需要使用向量函数来执行此操作:

#(vector (keyword %) (.getObject resultset %))
Run Code Online (Sandbox Code Playgroud)

PS还有地图,集等功能.


drc*_*ode 5

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

我会推荐以下作为最佳选择:

#(vector (keyword %) (.getObject resultset %))
Run Code Online (Sandbox Code Playgroud)

  • 我不认为 #[...] 会普遍到足以保证它的特殊语法,一旦你了解了它,把 `vector` 扔进去没什么大不了的。 (2认同)