clojure - 如何从 Clojure 获取 Java 类的方法?

标签 clojure

如何从 Clojure 获取 Java 类的方法?

最佳答案

[编辑2]

根据下面 M Smith 的评论,这完成了相同的任务,但提供了按方法名称排序并且仅返回方法:

(print-table
  (sort-by :name 
    (filter :exception-types (:members (r/reflect "foo")))))

[/编辑2]

[编辑]

我原来的答案是指 Clojure 1.2,但是 Clojure 1.3 的情况发生了变化。现在,这可以在不依赖 Clojure 的 contrib 库的情况下运行:

(require '[clojure.reflect :as r])
(use '[clojure.pprint :only [print-table]])

(print-table (:members (r/reflect "foo")))

这提供了一种更加解耦的方法,reflect 函数提供有关传入参数的各种信息(在本例中为 String "foo") 和 print-table 函数采用任何通用表格数据结构并漂亮地打印它。

此内容最初来自this thread on the Google Group .

[/编辑]

我会在 clojure.contrib.repl-utils 命名空间中使用 show 函数,它将打印对象(或类的类)的所有静态和实例成员一个东西)。我需要这样:

(require '[clojure.contrib.repl-utils :as ru])

以下是使用 Joda Time 的示例:

(import 'org.joda.time.DateTime)
(ru/show DateTime)
(ru/show (DateTime.))

第一个示例演示了如何简单地将类传递给 show,而第二个示例演示了您也可以传递该类的实例。

这当然适用于许多底层为 Java 类的 Clojure 项目。下面是查看 java.lang.String 实例可用的所有方法的示例:

(ru/show "foo")

关于clojure - 如何从 Clojure 获取 Java 类的方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5821286/

相关文章:

recursion - 在 Clojure 中将结果累积到向量中的最佳方法? (纯功能代码看起来丑陋和冗长)

unit-testing - 如何在测试套件中包含clojure.spec的功能

postgresql - 克洛贾尔/后gresql : How do I see the exception when an error is in the db?

clojure - 在 Clojure deftype 中重写 equals、hashCode 和 toString

python - 递归函数(阶乘)用 IntOverflow 打破了 Clojure 而不是 Python

logging - 记录 HugSQL 执行的 sql 语句/查询

session - 我如何为 clojure/script 使用 session

multithreading - Clojurescript中如何实现Atom?

clojure - 为什么匿名函数不能与 clojure 中的 map 一起使用?

clojure - Common Lisp 中 Clojure 的 "do"相当于什么?