Мне трудно понять (и, следовательно, запомнить) синтаксис clojure, описанный здесь: 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 и использование :require
внутри макроса ns только оптически похожи, но все же.
Есть и другие странности, например, я могу это сделать:
(require '(clj-json.core))
Но я не могу этого сделать:
(require '(clj-json.core :as json))
Может кто-то ответить на эти вопросы:
- в первом примере почему нужно указывать вектор?
- почему это не нужно указывать в макросе ns?
- почему нотация списка не позволяет
:as
?
Мне интересно, есть ли причины, почему так оно и есть, или если несоответствие просто не было замечено во время разработки.