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