我正在尝试编写一个容器函数,它接受一个函数名,它的参数,并用另一个参数调用该函数.
我很确定我做错了,但到目前为止我已经做到了.
(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但无法解决.
有没有办法可以解决这个问题?还是我更善于使用感应功能?
你可以使用申请.
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)