gpt4 book ai didi

clojure - 惯用的 clojure 有条件地调用函数

转载 作者:行者123 更新时间:2023-12-03 01:55:28 25 4
gpt4 key购买 nike

我有一个 clojure 函数,如果特定条件为真,则需要将信息推送到映射中,并使用该映射作为另一个函数的参数。

我有以下内容,但重复调用 bar 函数感觉很笨拙。

(defn foo ([opts]

(if (= true (something))
(bar (into opts {:a b}))
(bar opts)))

(def bar [opts])

因此,如果(某事)为真,我们会在调用 bar 函数之前将额外的选项推送到 opts 参数中,否则我们只是将其传递。

最佳答案

首先,(= true (something)) 可以简单地替换为 (something) ,没有任何问题(除非您实际上试图区分返回值)值为 true 且返回值为 1)。如果返回值的选项为 truefalse,则 (something) 本身就可以正常工作。您还可以使用 merge 而不是 into,这可能会稍微清晰一些。

你可以试试

(bar (if (something)
(merge opts {:a b})
opts))

这也可以工作,尽管当 (something) 为 false 时,它​​会不必要地调用 merge,尽管第二个参数为 nil , merge 应该会很快返回。

(bar (merge opts
(when (something)
{:a b})))

关于clojure - 惯用的 clojure 有条件地调用函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9137021/

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