[РЕДАКТИРОВАТЬ 2]
В приведенном ниже комментарии М Смита это тоже самое, но обеспечивает сортировку по имени метода и возвращает только методы:
(print-table
(sort-by :name
(filter :exception-types (:members (r/reflect "foo")))))
[/ EDIT 2]
[EDIT]
Мой первоначальный ответ относится к Clojure 1.2, но с Clojure 1.3 все изменилось.Теперь это работает без какой-либо зависимости от библиотек Contribute Clojure:
(require '[clojure.reflect :as r])
(use '[clojure.pprint :only [print-table]])
(print-table (:members (r/reflect "foo")))
Это обеспечивает гораздо более несвязанный подход с функцией reflect
, предоставляющей все виды информации о передаваемом аргументе (в данном случаеString
"foo"
) и функция print-table
берет любую общую табличную структуру данных и довольно печатает ее как таковую.
Это родом из этой темы в группе Google .
[/ EDIT]
Я бы использовал функцию show
в пространстве имен clojure.contrib.repl-utils
, которая будет печатать все статические и экземпляры для объекта (иликласс объекта).Мне нужно вот так:
(require '[clojure.contrib.repl-utils :as ru])
Вот пример использования Joda Time:
(import 'org.joda.time.DateTime)
(ru/show DateTime)
(ru/show (DateTime.))
Первый пример демонстрирует, как вы можете просто передать класс в show
, а второйдемонстрирует, что вы также можете передать экземпляр класса.
Это, конечно, работает для многих элементов Clojure, которые являются Java-классами ниже.Вот пример просмотра всех методов, доступных для экземпляра java.lang.String:
(ru/show "foo")