Welche Funktion verwende ich in Clojure, um die Methoden eines Java-Objekts zu sehen?
%Vor%Verwenden Sie Java-Reflektion.
%Vor%bringt dir die Klasse. Um Methoden zu erhalten,
%Vor%Was Ihnen eine Reihe von Methoden bietet. Sie können das wie eine Sequenz behandeln; Ich würde es wahrscheinlich in einen Vektor setzen, also:
%Vor% Seit Version 1.3 wird Clojure mit dem Namensraum clojure.reflect
ausgeliefert. Insbesondere die Funktion reflect
kann verwendet werden, um alle Methoden anzuzeigen (und andere Informationen) für ein Objekt. Es ist nicht so bequem wie show
zu verwenden. Auf der anderen Seite ist es viel allgemeiner und es ist ziemlich einfach, eine eigene Version von show
mit reflect
als Baustein zu schreiben.
Wenn Sie beispielsweise alle Methoden für String sehen möchten, die einen String zurückgeben:
%Vor%Früher konnten Sie show für diese Art von Dingen verwenden (z. B. mit clojure 1.2.0, clojure-contrib 1.2.0).
%Vor%Von der REPL
%Vor%ergab
%Vor% Seltsamerweise habe ich das mit clojure 1.3.0 / clojure-contrib 1.2.0 versucht und es hat nicht funktioniert. doc
scheint auch defekt.
IIRC es ist nicht eingebaut, aber es ist auch kurz siehe diese Implementierung .
(Es könnte jetzt sein.)
Normalerweise machen Sie diese Methodenauflistung, weil Sie nach einer bestimmten Art von Methode suchen. Sagen Sie alle Methoden, die in der Klasse "erhalten" werden. So können Sie das für Ihr Objekt 'obj' tun:
%Vor%Das # "get" ist das reguläre Ausdruck-Objekt, um nach Methoden zu suchen, die ihren Namen erhalten haben (passen Sie sie für Ihre eigenen Bedürfnisse an). Der Map-Ausdruck erzeugt einfach einen Seq aller Methodennamen in der Klasse des Objekts; Der Seq wird der anonymen Funktion zugeführt, die der erste an den Filter übergebene Parameter ist.