如何查看与 Clojure 中的对象关联的方法?

2022-09-04 05:55:13

在Clojure中,我使用什么函数来查看Java对象的方法?

user=> (some-function some-java-object)
... lots of methods ...

答案 1

从版本1.3开始,Clojure与clojure.reflect命名空间捆绑在一起。反射函数尤其可用于显示对象的所有方法(和其他信息)。它不像 使用起来那么方便。另一方面,它更通用,并且很容易编写自己的版本用作构建块。showshowreflect

例如,如果您想查看返回 String 的 String 的所有方法:

user=> (use 'clojure.reflect)
user=> (use 'clojure.pprint)

user=> (->> (reflect "some object") 
            :members 
            (filter #(= (:return-type %) 'java.lang.String))
            (map #(select-keys % [:name :parameter-types])) 
            print-table)

答案 2

使用 java 反射。

(.getClass myObject)

让你上课。要获取方法,

(.getMethods (.getClass myObject))

这为您提供了一系列方法。你可以把它当作一个序列;我可能会把它放到一个向量中,所以:

(vec (.getMethods (.getClass myObject)))