gpt4 book ai didi

clojure - 关于来源->>

转载 作者:行者123 更新时间:2023-12-02 15:40:07 25 4
gpt4 key购买 nike

我正在浏览 clojure.core 的源代码:

(defmacro ->>
[x & forms]
(loop [x x, forms forms]
(if forms
(let [form (first forms)
threaded (if (seq? form)
(with-meta `(~(first form) ~@(next form) ~x) (meta form))
(list form x))]
(recur threaded (next forms)))
x)))

在第 7 行,为什么不直接

(with-meta `(~@form  ~x) (meta form))

最佳答案

这几乎是等价的,但又不完全一样。考虑一下如果 form (错误地)是 () 会发生什么。正如所写,此错误在编译时被捕获,因为计算 (nil x) 是非法的。根据您建议的简化,错误将在运行时被注意到,或者如果 x 碰巧是没有参数的函数,则可能根本不会注意到错误。

抛开正确性不谈,它的可读性也更好,因为它强调第一个形式将被调用,其余的作为参数。它与 -> 的实现也有更好的对称性。

关于clojure - 关于来源->>,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41831716/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com