gpt4 book ai didi

clojure - 让膨胀或惯用的clojure?

转载 作者:行者123 更新时间:2023-12-02 21:14:45 24 4
gpt4 key购买 nike

作为 clojure 新手,我很难为不同的代码结构找到惯用的风格。

在某些情况下,我的 let 绑定(bind)包含函数的大部分代码。这是对 clojure 哲学的一些误解还是惯用语?

这是一个用于演示的示例测试用例。它测试到某个存储库的添加/获取往返。长长的让看起来很奇怪吗?

(deftest garden-repo-add-get
(testing "Test garden repo add/get"
(let [repo (garden/get-garden-repo)
initial-garden-count (count (.list-gardens repo))
new-garden (garden/create-garden "Keukenhof")
new-garden-id (.add-garden repo new-garden)
fetched-garden (.get-garden repo new-garden-id)]
(is (= (+ initial-garden-count 1) (count (.list-gardens repo))))
(is (= (.name new-garden) (.name fetched-garden))))))

最佳答案

我在您的 let 代码中发现的主要问题(通常情况下)是您使用了大量中间变量,这些变量只有名称才能存在于 let 形式.

避免过度膨胀的最佳方法是使用箭头宏 ->->>

例如,您可以使用 repo 避免中间变量

initial-garden-count (-> (garden/get-garden-repo)
(.list-gardens)
count)

尽管如此,在您的特定情况下,您在测试验证中使用了所有中间变量,因此无论如何您都需要在 let 语句中使用它们。也许 new-garden-id 是您可以避免的唯一中间产物:

fetched-garden (->> (.add-garden repo new-garden)
(.get-garden repo))

或者使用 Chiron 建议的方法:

fechted-gaden (.get-garden repo (.add-garden repo new-garden))

关于clojure - 让膨胀或惯用的clojure?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19492584/

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