2013-07-30 2 views

ответ

10

Деконструкция show, чтобы быть более «простыми», делая доступными различные фрагменты повторно используемой функциональности, обсуждался Стюартом Хэллоуэйном в talk, который он дает на простоте clojure.

Полученный код использует clojure.reflect/reflect и clojure.pprint/print-table и стандартный 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

Одна из интересных вещей о 'show' является то, что он работал на случаях, а также по типам (см HTTPS://stackoverflow.com/questions/5821286). Знаете ли вы о каких-либо примерах (например, в Clojuredocs или блогах), которые показывают, как определить значения переменных экземпляра экземпляра класса Java? Пространства имен clojure.repl, похоже, недостаточно (https://clojure.github.io/clojure/clojure.repl-api.html) –

+0

clojure.reflect/reflection выше построен поверх API отражения Java, поэтому он должен делать то, что вам нужно. Часть разрыва «шоу» заключалась в том, что он делал слишком много. Функциональность отражения была доступна в пространстве имен clojure.reflect (а не в repl-api). Попробуйте приведенный выше пример с экземпляром строки вместо типа - (clojure.reflect/reflection "экземпляр строки") –

6

Я отсылаю вас к Where Did Clojure.Contrib Go документ, в котором говорится о clojure.contrib.repl-утилитами:

мигрировали в clojure.repl и clojure.java.javadoc. показать функциональность, похожую на clojure.reflect/reflection.

Документация API clojure.reflect является here и примеры clojuredocs.org являются here.