首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Clojure: GitHub中更新的两种不同定义

Clojure: GitHub中更新的两种不同定义
EN

Stack Overflow用户
提问于 2016-12-15 06:52:09
回答 1查看 92关注 0票数 2

我一直在尝试重新实现更新,作为一个学习练习,并且一直在使用Clojure的core.clj GitHub来找到一个明确的答案。我找到了函数的两个不同定义,一个在主控分支中:

代码语言:javascript
复制
(defn update-in
  ;; metadata removed
  {:added "1.0"
   :static true}
  ([m ks f & args]
     (let [up (fn up [m ks f args]
                (let [[k & ks] ks]
                  (if ks
                    (assoc m k (up (get m k) ks f args))
                    (assoc m k (apply f (get m k) args)))))]
       (up m ks f args))))

010864英尺..。树中有一个:

代码语言:javascript
复制
(defn update-in
  ;; metadata removed
  {:added "1.0"
   :static true}
  ([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)))))

想必(虽然我不知道如何找出答案),非主树中的版本是更新的,并且没有被带入主目录。我尝试过在REPL中实现非主版本,它似乎运行良好。我可以看到参数略有不同,在REPL中调用(doc update-in)将返回与树的定义相同的参数。

我还有点困惑,为什么Master中的定义比非主版本更冗长,后者似乎使用已建立的Clojure函数(即在以后的版本中没有引入任何内容)。

请找个人:

  1. 澄清这两个不同的版本是什么?
  2. 解释为什么当树更简洁的时候,大师更详细的定义会存在(尽管有稍微不同的args)?它是否刚刚被重新分解,以便更有效地工作?
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-12-15 08:40:44

大师实际上是最近的一位,从这两棵树被责备的结果就可以看出。在主分支的情况下,您可以看到引入更改的提交称为https://github.com/clojure/clojure/commit/53b02ef20c32386c4b4e23e1018e1a19140fee06。我在提交中没有看到更多的信息,坦白地说,这是不好的。

该修补程序引入了一个本地函数,当存在非空ks参数时(一般情况下,降至键时),该函数将更改所做的操作。通过update-inapply的递归调用被直接调用up所取代。

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

https://stackoverflow.com/questions/41158091

复制
相关文章

相似问题

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