我是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)
#^是旧的,已弃用的语法.^现在就开始使用,除非你运行的是旧版本的Clojure(1.2之前版本).
为什么会失望?这是Clojure等语言之美的一部分!when 是刚刚来定义if.它看起来像一个语言结构,但它实际上只是一个任何人都可以编写的宏.when字面上变成一个if与do在编译时.when当完全有可能用现有形式来定义语言时,它可能会使语言变得复杂化.
目的when是在条件成立时执行副作用,否则不执行任何操作.它只是一个可读性助手.它类似if-not,和when-not宏,只是变成ifs的自己的病情否定.它们不是必需的,但它们肯定有助于清理代码.