syntax - 何时在 clojure require 中包含撇号?

标签 syntax clojure

有什么区别:

(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/

相关文章:

clojure - 4clojure练习2

java - Lisp : Don't know how to create ISeq from Java. lang.Integer

clojure - IllegalStateException 编译 Clojure-Contrib

Clojure 实时浏览器在 Linux 上重新加载

单引号或双引号字符串的 ruby​​ 编码约定

java - 非法结果集

objective-c - 这个 ' ->' 在 c/objective-c 中是什么意思?

mysql - 当没有 "having"子句时, "where"和 "group by"是否完全等价?

sql - Sybase proc 抛出 "Incorrect syntax near ' ='"

clojure - ".swap"源代码中的 "swap!"有什么作用?