clojure – 为什么默认情况下when-let和if-let不支持多个绑定?

为什么默认情况下let-let和if-let不支持多个绑定?

所以:

(when-let [a ...
           b ...]
  (+ a b))

…代替:

(when-let [a ...
  (when-let [b ...
    (+ a b)))

我知道我可以编写自己的宏或使用monad(如这里所述:http://inclojurewetrust.blogspot.com/2010/12/when-let-maybe.html)。

因为(对于if-let,至少)对“else”的情况是不明显的。

至少,由Better way to nest if-let in clojure开始,我开始写一个这样做的宏。特定

(if-let* [a ...
          b ...]
  action
  other)

它会产生

(if-let [a ...]
  (if-let [b ...]
    action
    ?))

我不清楚如何继续(有两个地方为“其他”)。

你可以说,任何失败都应该有一个替代方案,或者什么时候没有,否则,如果任何一个测试发生变化,那么事情仍然会变得混乱。

简而言之,这比我预期的要复杂一些,所以我猜想现在的方法是避免不了解一下解决方案。

说出同样的事情的另一种方式:你假设如果我们应该像Let一样嵌套。一个更好的模型可能是cond,这不是一个“嵌套的if”,而是一个“替代if”,所以不适合范围…或另一种说法:如果不处理这种情况更好。

翻译自:https://stackoverflow.com/questions/11676120/why-dont-when-let-and-if-let-support-multiple-bindings-by-default

转载注明原文:clojure – 为什么默认情况下when-let和if-let不支持多个绑定?