Ответ 1
- в первом примере почему нужно указывать вектор?
require
- это функция, поэтому вам нужно процитировать их, чтобы предотвратить оценку. В противном случае эти символы будут просматриваться в текущем контексте, что может привести к ошибке или, возможно, неожиданному поведению. Кстати, я думаю, что это не совсем правильно: "Counter intuitive, потому что обычно векторы не цитируются в clojure (списки цитируются, а векторы рассматриваются как данные).
Это может быть интуитивно понятным для вас, однако нет ничего плохого в цитировании векторов (или карт или наборов). Я часто делаю, когда вы быстро проверяете что-то в REPL и не хотите вводить :
для каждого ключевого слова в карте или векторе, например:
user=> '{a 1 b 2 c 3}
а не:
user=> {:a 1 :b 2 :c 3}
Первая очень мала быстрее, чтобы напечатать, если я просто хочу быстро получить некоторые данные, чтобы что-то проверить.
- почему это не нужно указывать в макросе ns?
Макросы не оценивают свои аргументы, они кажутся более ленивыми, чем обычные вызовы функций, поэтому символы (clj-json.core
и json
) не нужно указывать для предотвращения оценки.
- почему нотация списка не позволяет: как?
Извините, я не знаю ответа на этот вопрос.
А, я взглянул на документы для require
и узнал. Там поддерживается другая форма:
"Ниже будут загружены библиотеки clojure.zip и clojure.set сокращенно "s".
(require '(clojure zip [set :as s]))