将函数作为参数传递并注入另一个参数

时间:2014-11-26 11:20:04

标签: clojure

我正在尝试编写一个容器函数,它接受一个函数名,它的参数,并用另一个参数调用该函数。

我很确定我做错了,但到目前为止我已经得到了。

    (defn get-dyn [& args]
      ((first args) "some" (rest args)))

所以,第一个参数是函数名,该函数可以有任意数量的参数,所以我想我必须接受可选参数? 我需要在我通过这个函数调用的所有函数中注入一个公共参数"some"

所以,

(get-dyn str 3 4)
(get-dyn str 32 "willhelm")

等等。我希望它等同于做

(str "some" 3 4)
(str "some" 32 "wilhelm")

除此之外,(rest args)返回一个集合,因此无法正常工作。

我尝试使用partial但是无法解决这个问题。

有没有办法可以解决这个问题?还是我更善于使用感应功能?

1 个答案:

答案 0 :(得分:6)

您可以使用apply。

user> (defn get-dyn [f & args]
        (apply f "some" args))
#'user/get-dyn
user> (get-dyn str 1 2)
"some12"
user> (get-dyn str " " 1 " " 2)
"some 1 2"