首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Clojure源代码中的偶然性重载

Clojure源代码中的偶然性重载
EN

Stack Overflow用户
提问于 2017-08-07 09:30:05
回答 1查看 76关注 0票数 3

以下是update-in的源代码

代码语言:javascript
复制
(defn update-in
 ([m [k & ks] f]
   (if ks
    (assoc m k (update-in (get m k) ks f))
    (assoc m k (f (get m k)))))
 ([m [k & ks] f a]
   (if ks
    (assoc m k (update-in (get m k) ks f a))
    (assoc m k (f (get m k) a))))
 ([m [k & ks] f a b]
   (if ks
    (assoc m k (update-in (get m k) ks f a b))
    (assoc m k (f (get m k) a b))))
 ([m [k & ks] f a b c]
   (if ks
    (assoc m k (update-in (get m k) ks f a b c))
    (assoc m k (f (get m k) a b c))))
 ([m [k & ks] f a b c & args]
   (if ks
    (assoc m k (apply update-in (get m k) ks f a b c args))
    (assoc m k (apply f (get m k) a b c args)))))

据我所知(我现在不太了解),这总是给出同样的结果:

代码语言:javascript
复制
(defn my-update-in2
 ([m [k & ks ] f & args]
  (if ks
   (assoc m k (apply update-in (get m k) ks f args))
   (assoc m k (apply f (get m k) args)))))

我的问题是:为什么update-in (和许多其他Clojure函数)没有以这种方式实现?我想是因为性能问题。不使用apply更快。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-08-07 09:50:27

是的,您正确地猜到了这一点:由于apply的性能成本,存在一些特性。

对于最常见的情况(例如,f函数最多有3个参数)具有显式的特性可以提高性能,因为它可以转换为直接函数调用。

票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45543623

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档