每隔一段时间我都会发现自己想要在多个参数集合上应用一组函数。使用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