gpt4 book ai didi

if-statement - 在 clojure 中嵌套 if-let 的更好方法

转载 作者:行者123 更新时间:2023-12-04 03:16:20 24 4
gpt4 key购买 nike

假设我有一张这种形式的 map :

(def m {:a "A" :b "B"})

如果 :a 我想做点什么和 :b都不是零,我可以这样做:
(if-let [a (:a m)]
(if-let [b (:b m)]
... etc ))

或者
(if (and (:a m) (:b m))
(let [{a :a b :b} m]
... etc ))

甚至
(if (every? m [:a :b])
(let [{a :a b :b} m]
... etc ))

有没有更简洁(即单线)的方法来实现这一目标?

最佳答案

我认为这里可能需要一个宏来创建您想要的行为。我从来没有写过(还),但以下表示向我表明这可能相当简单:

(let [{:keys [a b]} m]
(when (every? identity [a b])
(println (str "Processing " a " and " b))))

使用 :keys解构绑定(bind)的形式和 every?启用键向量的单一规范来解构和检查,并且绑定(bind)的局部变量在以下代码块中可用。

这可用于制作宏,例如 (when-every? [keys coll] code-with-bindings)
如果我可以花时间弄清楚如何做,我可以用宏代码更新这个答案。

关于if-statement - 在 clojure 中嵌套 if-let 的更好方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11673825/

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