我有一个向量,想要在Clojure中调用一个函数。该函数接受许多参数,我有矢量。
例如:
(defn f [a b] (+ a b))
我有矢量:
[1 2]
我可以使用申请:
(apply f [1 2])
但我可以像在python中一样在Clojure中调用f
吗?
(f *[1 2]) .
我的用例是我需要dissoc
来自地图的一些键。我想拨打(dissoc amap *keys)
,但不支持。
我可以使用apply
(apply dissoc (cons amap keys))
但不太方便。
在Clojure中最好的方法是什么?
答案 0 :(得分:6)
正如其他人注意到的那样,apply
是Python的arbitrary argument lists的完全等价物。在您的用例中,给出
(def a-map {1 2, 3 4, 5 6})
(def some-keys (range 5))
从dissoc
到some-keys
a-map
(apply dissoc a-map some-keys)
; {5 6}
我的原始解决方案也有效
(reduce dissoc a-map some-keys)
; {5 6}
但仅仅因为dissoc
可以一次获取一个关键参数,或者同时获取所有关键参数。