2024年Clojure状态调查!中分享您的想法。

欢迎!请参阅关于页面了解更多关于如何使用本网站的信息。

+3

我觉得使用宏对ifcond,我们遗漏了if-let的补充宏

(defmacro cond-let
  [& clauses]
  (when clauses
    (if (next clauses)
      (list 'if-let (first clauses)
            (second clauses)
            (cons 'cond-let (nnext clauses)))
      (first clauses))))

(cond-let [a nil] {:a a}
          [b false] {:b b}
          :default)

我没有发现过去是否讨论过这种cond-let(不引入太多新语法)的变体宏,但它在clolure.core中看起来非常自然。

2 答案

0

你什么时候会使用它?

我曾处理过包含多个嵌套 `if-let` 的代码,并发现这种模式。
```
(if-let [a ...]
  (do a)
  (if-let [b ...]
    (do b)
    (do :default))
```
后来我意识到这种情况很少见,这种宏并不很有用。
抱歉打扰。
让我们忘掉这件事吧 :)
0

为其点赞+1。

这时的条件表达式要返回一个有用的值,而不是返回 true/false,然后可以直接将该值用于代码体中。
如果有多个条件,if-let 是嵌套的,但将它们平铺描述有助于提高可读性。

...