Обоснование синтаксиса clojure require

Мне трудно понять (и, следовательно, запомнить) синтаксис clojure require, описанный здесь: http://clojuredocs.org/clojure_core/1.3.0/clojure.core /требовать. Это кажется одновременно нелогичным и неоднородным.

Например, в следующем, почему этот вектор должен быть заключен в кавычки:

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

Кто-нибудь может ответить на эти вопросы:

  1. в первом примере, почему вектор нужно цитировать?
  2. почему его не нужно заключать в кавычки в макросе ns?
  3. почему нотация списка не позволяет :as?

Мне интересно, есть ли причины, по которым все так, как есть, или это несоответствие просто не было замечено во время разработки.

17
задан Mechanical snail 25 November 2012 в 05:17
поделиться