我只是在学习语言,我有一个简单的问题。为什么这项工作(构建{:key "value"}
):在Clojure的匿名函数上构建地图
(#(assoc {} :key %) "value")
但这并不:
(#({:key %}) "value")
ArityException Wrong number of args (0) passed to: PersistentArrayMap clojure.lang.AFn.throwArity (AFn.java:429)
关于Python后者的语法是完全有效:
> (lambda v: {'key': v})('value')
{'key': 'value'}
编辑:感谢伟大的答案,很明显我需要停止在Python中认为#
等于lambda
。
'#(f x)==(fn [](f x)):。 #({x})==(fn []({x}))' – dsm
这是一个简单的hacky,但是如果你想从anon fn返回一个元素:'#( - > {:key%})' – ClojureMostly
还有'#(散列图:k%)' – cfrick