2011-01-16 14 views
12

¿Hay alguna manera en clojure para obtener el código de una función después de cargar la función?obtener un código de función de clojure

Ie. sin hacer algo como [probado]

(defmacro blat [x] `(do (def code ~(quote (mexpand-all x))) 
         ~x))) 
(blat (defn func [abc] (...))) 

Respuesta

7

Puede obtener el código fuente de un símbolo utilizando la función clojure.repl/source. Sin embargo, esto solo funciona si la var para la cual se resuelve el símbolo está en un archivo .clj en la ruta de clase. No puede, por ejemplo, hacer esto:

user=> (defn foo [x] x) 
#'user/foo 
user=> (require 'clojure.repl) 
nil 
user=> (clojure.repl/source foo) 
Source not found 
nil 
+2

hmm. (mexpand-all (read-string (source-fn 'foo))) es lo que quiero –

Cuestiones relacionadas