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还有地图,集等功能.
是的,Clojure 应该真正支持 #[...] 构造,仅适用于这种情况。
我会推荐以下作为最佳选择:
#(vector (keyword %) (.getObject resultset %))
Run Code Online (Sandbox Code Playgroud)