gpt4 book ai didi

clojure - Clojure 中 with-redefs 和 with-redefs-fn 有什么区别?

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

我想了解 with-redefswith-redefs-fn 之间的区别。

具体的例子对于理解 fns 的行为很有帮助。

最佳答案

它们基本相同,主要区别在于 with-redefs允许您显式写出正文(如 let ),而 with-redefs-fn需要一个函数作为参数,因此您可能需要将所需内容包装在 lambda 中。此外,with-redefs允许您使用向量提供绑定(bind)(同样,如 let ),而 with-redefs-fn想要一张 map 。我认为这两种差异都只是表面的。

例如

(with-redefs [http/post (fn [url] {:body "Goodbye world"})]
(is (= {:body "Goodbye world"} (http/post "http://service.com/greet"))))

对比

(with-redefs-fn {#'http/post (fn [url] {:body "Goodbye world"})}
(fn [] (is (= {:body "Goodbye world"} (http/post "http://service.com/greet")))))

事实上,with-redefs定义为 with-redefs-fn ,基本上只是将主体包装在匿名函数中,然后将所有内容传递给 with-redefs-fn : https://github.com/clojure/clojure/blob/e3c4d2e8c7538cfda40accd5c410a584495cb357/src/clj/clojure/core.clj#L7404

关于clojure - Clojure 中 with-redefs 和 with-redefs-fn 有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43348878/

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