何时在clojure中包含撇号?

时间:2015-07-12 21:17:23

标签: syntax clojure

有什么区别:

(require '[some-package.sub as some])
(require 'example.core)

(require [some-package.sub as some])
(require example.core)

我什么时候应该使用另一个?只有带撇号的那个在REPL环境中工作。

1 个答案:

答案 0 :(得分:8)

require是一个函数(在REPL中检查(source require))。因此,在评估之前评估其参数。

当您致电时,请求符号some-package.sub(points)解除为空,这样您就可以获得"无法在此上下文中解析符号the-symbol-that-points-to-nothing。 .. "

但是,如果你引用上述符号,我们可以得到require的实际评估。因此require,因为它是一个函数,需要引用的形式。

现在ns是一个宏(在REPL中使用(source ns)进行检查)。因此,在扩展之前不评估其参数。从技术上讲,它可以采用免费符号或引用形式,但决定使用原始的自由符号。 (ns lalala (:require [some-package.sub :as some]))

No-o-o-o-ow,当你用require调用a(函数)时,你实际上需要一个解析为var的符号。

实施例

(def a 'B)
(require a)
FileNotFoundException Could not locate B__init.c;ass or B.clj on the classpath[...]

......那是因为必需是一种功能。

希望它有所帮助。