有什么区别:
(require '[some-package.sub as some])
(require 'example.core)
和
(require [some-package.sub as some])
(require example.core)
我什么时候应该使用另一个?只有带撇号的那个在REPL环境中工作。
答案 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[...]
......那是因为必需是一种功能。
希望它有所帮助。