git - Clojure:GitHub 中 update-in 的两种不同定义

标签 git clojure

我一直在尝试重新实现更新作为学习练习,并一直在使用 Clojure 的 core.clj GitHub 来寻找明确的答案。我发现了该函数的两个单独的定义,一个在 Master 中分支:

(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))))

其中一个位于 010864f8ed...树:

(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)))))

大概(虽然我不知道如何找出),非Master树中的版本较新,并且没有被带入Master中。我尝试在 REPL 中实现非 Master 版本,它似乎工作正常。我可以看到参数略有不同,并且在 REPL 中调用 (doc update-in) 返回与树定义相同的参数。

我也有点困惑为什么 Master 中的定义比非 Master 版本更详细,它似乎使用了已建立的 Clojure 函数(即后续版本中没有引入任何内容)。

请有人:

  1. 澄清一下这两个不同的版本是什么?
  2. 解释一下为什么当树的更简洁的定义有效时(尽管参数略有不同),Master 的更详细的定义却存在?它刚刚经过重构以提高工作效率吗?

最佳答案

master 实际上是最新的,这可以通过查看两棵树的 Blame 结果看出。对于 Master 分支,您可以看到引入更改的提交名为 improve update-in perf 。我在提交中没有看到任何更多信息,坦率地说,这不好。

该补丁引入了一个本地函数,该函数会更改当存在非空 ks 参数时所执行的操作(一般情况,当下降到键时)。通过 applyupdate-in 的递归调用被对 up 的直接调用所取代。

关于git - Clojure:GitHub 中 update-in 的两种不同定义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41158091/

相关文章:

github - 如何在推送到同一分支时挑选提交

git - 如何重做git中丢弃的本地更改?

java - 如何从垃圾邮件 System.out 中阻止 apache.commons.logging?

clojure - 在Clojure中遍历,迭代和参观树木

clojure - 在可变参数函数中使用 recur 时出现意外行为

git - 从 Git bash 调用 Notepad++

git:是否有类似每个分支标签的东西?

git - 暂存区内的底层 git merge 进程是什么?

clojure - Clojure 中的迭代器 block ?

regex - Clojure 中的多个正则表达式