2016-08-30 4 views
2

私は名前空間を渡す関数lookup-fileを書くことができ、それは.cljファイルを自動的に解決することができます。与えられた名前空間で関連ファイルを検索する方法は?

すなわち:

(lookup-file 'rabbit.warren-test) 
;=> "test/rabbit/warren-test.clj" 

(lookup-file 'rabbit.warren) 
;=> "src/rabbit/warren.clj" 

(lookup-file 'clojure.core) 
;=> "~/.m2/repositories/org/clojure/clojure/clojure-1.9.0.jar:/...." 

これを行う組み込み関数がありますか?

答えて

2

あなたはこのトリックを使って、いくつかの情報を得ることができる:

(defn files-for-ns [ns-sym] 
    (->> (ns-publics ns-sym) 
     keys 
     (map resolve) 
     (map meta) 
     (map :file) 
     set)) 
をしたり、完全なパスたい場合:

(require '[clojure.java.io :as io]) 

(defn files-for-ns [ns-sym] 
    (->> (ns-publics ns-sym) 
     keys 
     (map resolve) 
     (map meta) 
     (map :file) 
     set 
     (keep identity) 
     (map io/resource) 
     (map str))) 

例:

(use 'clojure.pprint) 
(pprint (files-for-ns 'clojure.core)) 
("jar:file:/Users/Borkdude/.m2/repository/org/clojure/clojure/1.9.0-alpha10/clojure-1.9.0-alpha10.jar!/clojure/gvec.clj" 
"jar:file:/Users/Borkdude/.m2/repository/org/clojure/clojure/1.9.0-alpha10/clojure-1.9.0-alpha10.jar!/clojure/core_proxy.clj" 
"jar:file:/Users/Borkdude/.m2/repository/org/clojure/clojure/1.9.0-alpha10/clojure-1.9.0-alpha10.jar!/clojure/core.clj" 
"jar:file:/Users/Borkdude/.m2/repository/org/clojure/clojure/1.9.0-alpha10/clojure-1.9.0-alpha10.jar!/clojure/core_print.clj" 
"jar:file:/Users/Borkdude/.m2/repository/org/clojure/clojure/1.9.0-alpha10/clojure-1.9.0-alpha10.jar!/clojure/core_deftype.clj" 
"jar:file:/Users/Borkdude/.m2/repository/org/clojure/clojure/1.9.0-alpha10/clojure-1.9.0-alpha10.jar!/clojure/genclass.clj") 
+0

私が探しているものですが、名前空間を読み込んだときにファイルが間違って綴られているのを知っています...申し訳ありませんx/y/z.cljには – zcaudate

+0

がありません。既にロードされているファイルではなく、ロードしようとしているファイルです。 – zcaudate

+0

申し訳ありませんが、あなたが何を意味しているかは完全にわかりません。 –

1

いいえ与えられた名前空間が0個以上のファイルに定義されている可能性があるため、組み込み関数がないだけでなく、一般的に知ることさえありません。例えば、clojure.coreは多くのソースファイルで定義されており、replにちょうど名前空間を定義することで、対応するソースファイルのない名前空間を作成することができます。

+0

を多分clojure.coreました悪い例。一般に、名前空間ごとに1つのファイルがあります。どういうわけかemacsは私がファイルを評価したときにどこに見えるかを知っています – zcaudate

関連する問題