假设您在clojure中有以下代码行。你需要报价做什么?
(require '[clojure.string :as str])
引号阻止求值。默认情况下,所有表达式都在Clojure中求值。在表达式前面使用引号可以防止求值。Clojure中的大多数表达式都是自求值的(它们对自己求值)。符号和列表是两个主要的例外。编辑:请看下面@amalloy的评论和回复。
在本例中,引号创建了一个文字向量,其第一个元素是符号clojure.string
,第二个元素是关键字:as
,第三个元素是符号str
。
如果没有引号,(require [clojure.string :as str])
将尝试计算符号clojure.string
和str
,其值将是绑定到这些符号的var包含的任何值(如果没有绑定,则会出现错误)。
下面是一个例子来说明它们的区别。假设您有以下两个def
s。
(def a 16)
(def b 12)
现在,'[a 14 b]
将求值为向量[a 14 b]
。但是,[a 14 b]
将计算为[16 14 12]
。
关于在Clojure中如何解析符号的详细信息,请参阅clojure.org
的求值部分。
您可能还会发现关于quote的文档很有帮助,关于Clojure语法的部分也是如此。