2013-07-30 3 views

Antwort

10

De-constructing show, um mehr "einfach" zu sein, verschiedene Stücke von wiederverwendbarer Funktionalität zur Verfügung zu stellen, wurde von Stuart Halloway in einer talk diskutiert, die er auf clojure Einfachheit gibt.

Der resultierende Code nutzt clojure.reflect/reflect und clojure.pprint/print-table und Standard clojure filter:

(require 'clojure.reflect) 
(require 'clojure.pprint) 

(->> (clojure.reflect/reflect java.lang.String) 
    :members 
    (filter #(.startsWith (str (:name %)) "last")) 
    (clojure.pprint/print-table)) 
+0

Eine der kühlen Sachen über 'show' ist, dass es auf Instanzen sowie auf Arten gearbeitet (siehe https://stackoverflow.com/questions/5821286). Sind Ihnen Beispiele bekannt (z. B. in Clojuredocs oder Blogs), die zeigen, wie die Werte von Instanzvariablen einer Instanz einer Java-Klasse ausgegeben werden? Der clojure.repl-Namespace scheint nicht genug zu haben (https://clojure.github.io/clojure/clojure.repl-api.html) –

+0

clojure.reflect/reflect ist oben auf der Java-Reflektions-API so aufgebaut es sollte tun, was Sie brauchen. Ein Teil des Punktes des Auseinanderbrechens von "Show" war, dass es zu viel war. Die reflect-Funktionalität wurde im clojure.reflect-Namespace (und nicht in der repl-api) verfügbar gemacht. Versuchen Sie das obige Beispiel mit einer String-Instanz anstelle des Typs - (clojure.reflect/reflect "Instanz einer Zeichenkette") –

6

verweise ich Sie auf die Where Did Clojure.Contrib Go Dokument, das über clojure.contrib.repl-utils sagt:

migrierenden clojure.repl und clojure.java.javadoc. zeige eine ähnliche Funktionalität wie clojure.reflect/reflect.

Die clojure.reflect API Dokumentation ist here und die clojuredocs.org Beispiele sind here.