什么时候在 clojure require 中包含撇号?
When to include apostrophe in clojure require?
有什么区别:
(require '[some-package.sub as some])
(require 'example.core)
和
(require [some-package.sub as some])
(require example.core)
我什么时候应该使用一个而不是另一个?只有带撇号的才能在 REPL 环境中工作。
require
是一个函数(在 REPL 中用 (source require)
检查)。因此在它自己的评估之前评估它的参数。
当你调用 require 符号时 some-package.sub
解析 (points)
为空,所以你得到 "Unable to resolve symbol: the-symbol-that-points-to-nothing
in this context..."
然而,如果你引用所述符号,我们可以得到 require
的实际评估。因此 require
,因为它是一个函数,所以需要引用形式。
现在 ns
是一个宏(在 REPL 中检查 (source ns)
)。因此在扩展之前不评估其参数。从技术上讲,它可以采用自由符号或引用形式,但决定使用原始自由符号。 (ns lalala (:require [some-package.sub :as some]))
No-o-o-o-ow,当您使用 a
调用 require
(函数)时,您实际上需要由 a 解析为的 var 持有的符号。
示例:
(def a 'B)
(require a)
FileNotFoundException Could not locate B__init.c;ass or B.clj on the classpath[...]
...那是因为 require 是一个函数。
希望对您有所帮助。
有什么区别:
(require '[some-package.sub as some])
(require 'example.core)
和
(require [some-package.sub as some])
(require example.core)
我什么时候应该使用一个而不是另一个?只有带撇号的才能在 REPL 环境中工作。
require
是一个函数(在 REPL 中用 (source require)
检查)。因此在它自己的评估之前评估它的参数。
当你调用 require 符号时 some-package.sub
解析 (points)
为空,所以你得到 "Unable to resolve symbol: the-symbol-that-points-to-nothing
in this context..."
然而,如果你引用所述符号,我们可以得到 require
的实际评估。因此 require
,因为它是一个函数,所以需要引用形式。
现在 ns
是一个宏(在 REPL 中检查 (source ns)
)。因此在扩展之前不评估其参数。从技术上讲,它可以采用自由符号或引用形式,但决定使用原始自由符号。 (ns lalala (:require [some-package.sub :as some]))
No-o-o-o-ow,当您使用 a
调用 require
(函数)时,您实际上需要由 a 解析为的 var 持有的符号。
示例:
(def a 'B)
(require a)
FileNotFoundException Could not locate B__init.c;ass or B.clj on the classpath[...]
...那是因为 require 是一个函数。
希望对您有所帮助。