当我使用 if-let like
(if-let [a 2 b nil] (+ a b))
我得到一个 IllegalArgumentException:
clojure.core/if-let requires exactly 2 forms in binding vector...
类似的当-让...
这不是我所期望的。If-let 可以尝试所有绑定并在其中一个失败时中断并评估 else 表达式。
在clojuredocs的评论中可以找到相同的投诉。我在这里找到了一个并没有真正令人满意的答案,因为张贴者似乎考虑到了相当于嵌套的 if-let 结构。
有什么理由限制 *-let 宏的绑定?
更新:似乎还不清楚,我对 if-let 的期望是:
- 它应该按顺序评估所有绑定。
- 当一切都成功时,它应该评估'then'-case。
- 如果一个绑定失败,它应该立即中断并评估“其他”情况。
- 在失败的情况下,绑定,即使是成功的绑定,也不应该在“else”表达式中可用