我很难理解(因此也难以记忆)这里描述的Clojure require语法:http://clojuredocs.org/clojure_core/1.3.0/clojure.core/require。它似乎既不符合直觉,也不统一。
例如,在以下示例中,为什么需要引用这个向量:
(require '[clj-json.core :as json])
相对于常规做法,这种方法有些反直觉,因为在Clojure中通常不使用引号来表示向量(列表会被引用,而向量则被视为数据)。
并且,在这种情况下,向量是未被引用的,因此具有非均匀性:
(ns xxx
(:require [clj-json.core :as json]))
我意识到 require 函数和 ns 宏内的 :require 使用只是在视觉上相似,但仍然存在一些奇怪的地方。
还有其他一些奇怪之处,例如我可以这样做:
(require '(clj-json.core))
但我无法做到这一点:
(require '(clj-json.core :as json))
有人可以回答这些问题吗:
- 在第一个例子中,为什么需要引用向量?
- 为什么在ns宏中它不需要被引用?
- 为什么列表符号不允许使用
:as
?
我想知道事情为什么会是这样,是因为设计时没有注意到不一致性的存在吗?