这两者之间有什么区别:
(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)
解析为无效内容,因此您会得到一个错误消息:“在此上下文中无法解析符号:the-symbol-that-points-to-nothing
”
但是,如果您引用该符号,我们可以实际评估require
。因此,由于require
是一个函数,需要引用形式。
现在,ns
是一个宏(在REPL中使用(source ns)
进行检查)。因此,在扩展之前不会评估其参数。从技术上讲,它可以使用自由符号或引用形式,但决定使用原始自由符号。(ns lalala (:require [some-package.sub :as some]))
当您使用a
调用require
(函数)时,您实际上会要求该变量所代表的符号。
(def a 'B)
(require a)
FileNotFoundException Could not locate B__init.c;ass or B.clj on the classpath[...]
这是因为 require 是一个函数。
希望对您有所帮助。