作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我目前正在编写具有未定义数量的函数,因此我在 clojure.core 等中寻找示例。
例如,这是 comp
(clojure.core) 的定义
(defn comp
"Takes a set of functions and returns a fn that is the composition
of those fns. The returned fn takes a variable number of args,
applies the rightmost of fns to the args, the next
fn (right-to-left) to the result, etc."
{:added "1.0"
:static true}
([] identity)
([f] f)
([f g]
(fn
([] (f (g)))
([x] (f (g x)))
([x y] (f (g x y)))
([x y z] (f (g x y z)))
([x y z & args] (f (apply g x y z args)))))
([f g & fs]
(reduce1 comp (list* f g fs))))
如您所见,对于元数 [f g],代码详细说明了 2 个和 3 个参数 (x y ; x, y, z) 的值,即使它可以直接跳转到 [x & args]。
有什么性能原因吗?或者这是一个约定?我认为调用 apply
可能会影响性能,我不知道。
现实生活中我们一般最多使用3D函数和2个函数的组合,也许就是因为这个。
谢谢
最佳答案
Clojure 的核心库通常以不太惯用的方式实现,特别是出于性能原因。如果您正在编写一个对于程序中大多数代码行至关重要的函数,您可以执行相同的操作,但一般来说,这并不优雅或特别建议。
关于Clojure : Is there any reason to detail arities in functions definition?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37270843/
我是一名优秀的程序员,十分优秀!