有什么区别:
(require '[some-package.sub as some])
(require 'example.core)
和
(require [some-package.sub as some])
(require example.core)
我什么时候应该使用一个?只有带撇号的才能在 REPL 环境中工作。
最佳答案
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
,您实际上将需要由 a 解析为的 var 持有的符号。
例子:
(def a 'B)
(require a)
FileNotFoundException Could not locate B__init.c;ass or B.clj on the classpath[...]
...那是因为 require 是一个函数。
希望它有所帮助。
关于syntax - 何时在 clojure require 中包含撇号?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31372704/