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

Loc*_*rde 0 clojure

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

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

    (defn get-dyn [& args]
      ((first args) "some" (rest args)))
Run Code Online (Sandbox Code Playgroud)

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

所以,

(get-dyn str 3 4)
(get-dyn str 32 "willhelm")
Run Code Online (Sandbox Code Playgroud)

等等.我希望它等同于做

(str "some" 3 4)
(str "some" 32 "wilhelm")
Run Code Online (Sandbox Code Playgroud)

除此之外,(rest args)返回一个集合,因此它不会那样工作.

我试过这样做,partial但无法解决.

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

run*_*xec 6

你可以使用申请.

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"
Run Code Online (Sandbox Code Playgroud)