2011-10-20 1 views
2

Clojureに現在どの名前空間があるかを確認する関数/マクロがありますか?'used'?どれ?だから、私は現在どの名前空間に入っているのかというわけではありませんが、例えば、 'clojure.contrib.string'が現在(use 'clojure.contrib.string)のように '使用されている'かどうか調べたいと思います。私は「必須」という意味ではありません。現在どのネームスペースが '使用されている'か、特にネームスペースが使用されているかどうかをチェックする方法/マクロは何ですか?

たとえば、 'clojure.contrib.string(シンボルで指定された名前空間の名前)が使用されている場合にtrueを返す関数を作成するにはどうすればいいですか? (DEFN NS-使用?[名前](...)

答えて

1

all-ns示唆したようにあなたが探しているものに近いですが、requiredが参照されていないすべての名前空間も表示されます

そうでなければ、ns-refersは名前空間で参照されるすべての関数のマップを提供します。シミlar、おそらくまた興味があるのはns-mapns-importsで、インポートされたすべてのクラスやレコードのマッピングが得られます。

あなたは厳密に関数が参照されているから、すべての名前空間を検索したい場合は、あなたがこのような何か行うことができます:あなたは、名前空間は、あなたがrequiredusedができてきたかどうかを確認するために満足している場合

(defn ns-used? [ns] 
    (let [referred-namespaces (set (map (fn [[k v]] (:ns (meta v))) (ns-refers *ns*)))] 
    (contains? referred-namespaces (find-ns ns)))) 

をあなたは引用符で囲まれた中で、シンボルを渡すために

(defn ns-used-or-required? [ns] 
    (contains? (set (all-ns)) (find-ns ns))) 

ていますか:

(ns-used? 'clojure.core) 
+1

tnx、サブクエリを追加しました –

+0

@MichielBorkent私はいくつかの掘り出しを行い、 'all-ns'は実際にあなたにも' required'ネームスペースをすべて与えました。関数が参照されたすべての名前空間を取得する解決策については、私の答えを参照してください(名前空間を '使用する '場合)。 – Paul

+0

オクラホマ、使用済みのものも手に入れる方法はありますか? –

0

all-ns '使用' のいくつかの適切な定義のために。 '使用' の他のいくつかの定義のための

ns-refers

+0

tnx、サブクエリを追加しました –

関連する問題