回答:
require
(すでにロードされていない)の負荷のLIBS、use
同じことをプラスして、それが彼らの名前空間を参照してclojure.core/refer
(あなたはまた、使用の可能性を得るように:exclude
と同じようになどclojure.core/refer
)。どちらns
も直接ではなくで使用することをお勧めします。
require
およびで外部関数を含めることは慣用的refer
です。名前空間の競合を回避し、実際に使用/必要とする関数のみを含め、各関数の場所を明示的に宣言します。
(ns project.core
(:require [ring.middleware.reload :refer [wrap-reload]]))
名前空間を前に付けてこの関数を呼び出す必要はありません。
(wrap-reload) ; works
使用しないrefer
場合は、名前空間を前に付ける必要があります。
(ring.middleware.reload/wrap-reload) ; works if you don't use refer in your require
use
代わりに選択した場合は、(かなり)常に次のように使用しますonly
。
(ns project.core
(:use [ring.middleware.reload :only [wrap-reload]]))
それ以外の場合は、すべてを含めるため、不必要に大きな操作となり、他のプログラマーが関数がどこにあるかを見つけるのが非常に混乱します。
また、このブログをClojure名前空間の詳細を学ぶためのリソースとして強くお勧めします。
(:use foo :only [bar])
とは(:require foo :refer [bar])
?これを行うには2つの方法があるのは奇妙に思えます。
(:require .. :refer ..)
、は、同じことを行う新しい方法であり、を効果的に廃止することができます:use
が、いくつかの欠点があります。
関数を呼び出すたびに名前空間を入力する必要がないため、確実に使用すると名前空間の競合が発生し、混乱を招く可能性があります。"use"と "require"の間の良い中間点は、実際に使用する名前空間の関数のみを "使用"することです。
例えば:
( '[clojure-contrib.duck-streams:only(writer reader)]を使用))さらに良いのは、名前空間定義のファイルの先頭でそれを指定することです:
(ns com.me.project (:use [clojure.contrib.test-is:only(deftest is run-tests)]))
(ns ...)
構文を(しゃれた)含めてくれてありがとう。私はそれを探していましたが、私が見つけた例はすべて単純なもの(use ...)
でした。
(require '[namepase :refer [var-name1 var-name2]])