Weiß jemand, ob es ein Clojure-Äquivalent für Pythons "dir" gibt. Im Grunde muss ich die Funktionen kennen, die ich für etwas oder spezifisch für Java-Objekte aufrufen kann. Ich möchte die verfügbaren Methoden und Eigenschaften kennen (ich bin mir nicht sicher, ob sie in Java Methoden und Eigenschaften heißen, das ist C# lingo).Python "dir" entspricht in Clojure
15
A
Antwort
15
clojure.contrib.repl-utils/show
für den Einsatz am 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[])
...
Alternativ vielleicht so etwas wie:
user=> (map #(.getName %) (.getMethods String))
("equals" "toString" "hashCode" "compareTo" ...)
.getFields
und .getConstructors
entsprechend.
8
Der clojure.repl
Namespace (die seit Clojure 1.2 verfügbar ist) enthält das Makro dir
und die Funktion 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)
Oh, vermisste ich die Einführung von 'clojure.repl' (nicht so viel Zeit für Clojure atm) - gut zu wissen. Aber wie benutzt man es mit Java-Zeug, wie vom OP gefordert? '(clojure.repl/dir String)' funktioniert nicht für mich. – danlei
Wahr, es ist nur für Clojure-Namespaces. – Jonas
Ich frage mich, warum sie nicht so etwas wie 'show' in clojure.repl dann enthalten. Wie auch immer, +1 für deine Erwähnung. – danlei