每隔一段時間我都會發現自己想要在多個參數集合上應用一組函數。使用map和一個非常簡單的功能很容易。(fn [f&args](apply f args))的標準版本或習慣用法
(map
(fn invoke [f & args] (apply f args))
[- + *]
[1 2 3]
[1 2 3]
[1 2 3])
(-1 6 27)
搜索網絡時,出現了很多定義類似函數的庫,通常稱爲funcall或invoke。由於Clojure對可變參數函數的偏愛,我不禁想到應該已經有了這個函數的默認版本。
有沒有,還是有另一種慣用的方式來解決這樣的情況?
編輯:
另一種形式可能是
(map
(comp eval list)
[- + *]
[1 2 3]
[1 2 3]
[1 2 3])
(-1 6 27)
這讓我害怕,因爲的eval。
所以你說的是如果最後一個應用參數是零,它不知何故被解釋爲一個序列? (申請+ 1 2 3無)的工作。相當有趣,我希望這是故意的,因爲它可能會非常方便。 – NielsK
是的 - 在Clojure中,nil被認爲是一個幾乎一致的空序列。例如(vec nil)=> []或(seq [])=> nil。你可以依靠這種行爲。 – mikera