Wie sehe ich die Methoden, die mit einem Objekt in Clojure verknüpft sind?

8

Welche Funktion verwende ich in Clojure, um die Methoden eines Java-Objekts zu sehen?

%Vor%     
Matt Fenwick 02.11.2011, 19:22
quelle

6 Antworten

8

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%     
Rob Lachlan 02.11.2011, 20:27
quelle
8

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%     
Jonas 03.11.2011 03:14
quelle
3
%Vor%

Ersetzen Sie "foo" durch Ihr Objekt.

    
Bill 02.11.2011 22:53
quelle
2

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.

    
Julien Chastang 02.11.2011 20:04
quelle
1

IIRC es ist nicht eingebaut, aber es ist auch kurz siehe diese Implementierung .

(Es könnte jetzt sein.)

    
Dave Newton 02.11.2011 19:32
quelle
1

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.

    
Don 04.11.2011 22:49
quelle

Tags und Links