这些类型提示形式之间的区别是什么,以及何时实现为if语句?

时间:2017-08-23 15:47:20

标签: clojure

我是clojure的新人,所以我想知道一些事情

有两种方法可以输入你的代码,我想知道差异

^String and others using #^String

当我看到来自的代码时我感到有点失望,如果不是真的那么 if 可以解释为什么(断言 抛出

(defmacro when
  "Evaluates test. If logical true, evaluates body in an implicit do."
  {:added "1.0"}
  [test & body]
  (list 'if test (cons 'do body)))

1 个答案:

答案 0 :(得分:7)

  1. #^ is the old, deprecated syntax.现在只需使用^,除非你正在运行一个非常旧版本的Clojure(1.2之前版本)。

  2. 为什么会失望?这是Clojure等语言之美的一部分! when 仅根据if定义。它看起来像一个语言结构,但它实际上只是一个任何人都可以编写的宏。在编译时,when字面上变为ifdo。如果完全有可能根据现有形式对when进行定义,那么将when作为一种特殊形式可能会使语言复杂化。

    if-not的目的是在条件成立时执行副作用,否则不执行任何操作。它只是一个可读性助手。它与when-notif宏类似,只是在条件被否定的情况下转变为tbase s。它们无论如何都不是必需的,但它们肯定有助于清理代码。