clojureの中を覗く
-
- classpathのリスト
- 現在のnamespaceで利用できる関数
- classが持っているmethod
classpath
clojureはjavaのSystemClassLoader以外のところにclasspathを格納していた。
(defn current-classpath [] (let [xs (list (.. java.lang.ClassLoader getSystemClassLoader getURLs) (.. clojure.lang.RT getRootClassLoader getURLs))] (apply concat (map (fn [urls] (map #(. % getFile) urls)) xs)))) ;;how-to-use ;(current-classpath)
現在利用できる関数の表示
(defn usable-functions ([] (usable-functions *ns*)) ([ns] ((comp keys ns-map) ns))) ;;how-to-use ;(usable-functions) ;(usable-functions (fisrt (all-ns)))
classの情報を調べる
(defn class-info [k] (letfn [(get-method-info [m] {:name (. m getName) :args (map class-simple (. m getParameterTypes)) :return-type (class-simple (. m getReturnType))}) (class-simple [k] (let [k* (. k getSimpleName)] (if (= "Object" k*) "o" k*)))] (let [k (if (class? k) k (class k))] {:class k :methods (sort-by #(:name %) (map get-method-info (. k getMethods)))}))) (defn describe-class [k] (let [table (class-info k)] (println "==" (:class table) "==") (doseq [x (:methods table)] (println x)))) ;;how-to-use ;(describe-class (type #""))