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

Raf*_*dio 2 clojure

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

有两种方法可以输入你的代码,我想知道它们的不同之处

^String and others using #^String
Run Code Online (Sandbox Code Playgroud)

当我看到从代码的时候我是有点失望,这是一个如果,如果这是不是真的可以解释我为什么(断言一个是)

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

Car*_*ate 7

  1. #^是旧的,已弃用的语法.^现在就开始使用,除非你运行的是旧版本的Clojure(1.2之前版本).

  2. 为什么会失望?这是Clojure等语言之美的一部分!when 刚刚来定义if.它看起来像一个语言结构,但它实际上只是一个任何人都可以编写的宏.when字面上变成一个ifdo在编译时.when当完全有可能用现有形式来定义语言时,它可能会使语言变得复杂化.

    目的when是在条件成立时执行副作用,否则不执行任何操作.它只是一个可读性助手.它类似if-not,和when-not宏,只是变成ifs的自己的病情否定.它们不是必需的,但它们肯定有助于清理代码.