我是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)))
答案 0 :(得分:7)
#^
is the old, deprecated syntax.现在只需使用^
,除非你正在运行一个非常旧版本的Clojure(1.2之前版本)。
为什么会失望?这是Clojure等语言之美的一部分! when
仅根据if
定义。它看起来像一个语言结构,但它实际上只是一个任何人都可以编写的宏。在编译时,when
字面上变为if
,do
。如果完全有可能根据现有形式对when
进行定义,那么将when
作为一种特殊形式可能会使语言复杂化。
if-not
的目的是在条件成立时执行副作用,否则不执行任何操作。它只是一个可读性助手。它与when-not
和if
宏类似,只是在条件被否定的情况下转变为tbase
s。它们无论如何都不是必需的,但它们肯定有助于清理代码。