Python "dir" equivalente en Clojure

¿Alguien sabe si hay un equivalente de Clojure para Pythons "dir"? Básicamente, necesito saber las funciones a las que puedo llamar en algo o, más específicamente, para los objetos java. Quiero saber los métodos y propiedades disponibles (no estoy seguro de si en java se llaman métodos y propiedades, esta es la jerga de C #).

preguntado el 09 de enero de 11 a las 04:01

2 Respuestas

clojure.contrib.repl-utils/show para usar en REPL:

user=> (use '[clojure.contrib.repl-utils :only (show)])
nil
user=> (show String)
===  public final java.lang.String  ===
[ 0] static CASE_INSENSITIVE_ORDER : Comparator
[ 1] static copyValueOf : String (char[])
[ 2] static copyValueOf : String (char[],int,int)
[ 3] static format : String (Locale,String,Object[])
[ 4] static format : String (String,Object[])
...

Alternativamente, tal vez algo como:

user=> (map #(.getName %) (.getMethods String))
("equals" "toString" "hashCode" "compareTo" ...)

.getFields, .getConstructors en consecuencia.

Respondido el 10 de enero de 11 a las 02:01

La clojure.repl el espacio de nombres (que está disponible desde Clojure 1.2) contiene la macro dir y la función dir-fn:

user=> (clojure.repl/dir clojure.main)   
load-script
main
repl
...

user=> (clojure.repl/dir-fn 'clojure.main)
(load-script main repl repl-caught repl-exception 
 repl-prompt repl-read skip-if-eol skip-whitespace 
 with-bindings)

Respondido el 09 de enero de 11 a las 10:01

Oh, me perdí la introducción de clojure.repl (no tanto tiempo para el cajero automático Clojure) - es bueno saberlo. Pero, ¿cómo lo usa con cosas de Java, como lo pidió el OP? (clojure.repl/dir String) no funciona para mí. - danlei

Es cierto, es solo para espacios de nombres Clojure. - Jonas

Me pregunto por qué no incluyeron algo como show en clojure.repl entonces. De todos modos, +1 por mencionarlo. - danlei

Muy útiles, pero no lo que estaba buscando, estos funcionan en espacios de nombres. Sin embargo, gracias por mencionarlos. - Ali

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.