2015-06-04 5 views
0

Эффект (use '[clojure.string :as str]), кажется, загружает все, что от clojure.string, в текущее пространство имен без квалификации пространства имен. Эффект (use '[clojure.string :as str :only (join)]), по-видимому, загружается только в текущее пространство имен, что делает остальное пространство имен clojure.string доступным с префиксом str/. Есть ли способ просто сделать полное пространство имен clojure.string доступным с префиксом str/ без выбора каких-либо имен, которые я хочу напрямую импортировать в текущее пространство имен?Уточняющий Clojure «Использовать как» семантика

ответ

2

require - предпочтительный метод для обращения к другим пространствам имен. Вы используете :as, чтобы предоставить префикс для требуемого пространства имен. Вы можете использовать :refer для передачи определенных символов в пространство имен без необходимости квалифицироваться. Если вы хотите импортировать все символы в пространство имен, вы можете использовать :all вместо имен символов, хотя его использование должно быть ограничено.

use больше не используется и его избегают, потому что это затрудняет понимание того, откуда приходит безоговорочный символ. Я даже не понял, что use может предоставить :as, это не указано в строке документа.

0

Обратите внимание, что различные форматы, используемые в файлах исходного кода Clojure, и REPL, которые могут сбивать с толку, если вы их смешиваете. В файле исходного кода, используются ns макроса:

(ns example.core 
    (:require [clojure.string :as str] 
      [datomic.api  :as d])) 

поэтому мы используем :requireключевое слова (с двоеточием), а векторы имен Specifcation являются неупомянуты. Сравните с тем, что вам нужно ввести в РЕПЛ:

(require '[clojure.string :as str]) 

где мы вызываем функциюrequire(без двоеточия), и, следовательно, должны указать вектор спецификации пространства имен.

Смежные вопросы