clojure - REPL 中的方法签名

标签 clojure

我需要使用一个文档不足的 Java 库,如果有一种方法可以查看 REPL 中方法的签名(用于快速实验),它将对我有所帮助。考虑以下:

user=> (import 'x.y.z.C)
user=> (show-method-signature 'C/m)
         C/m String Integer String boolean

有没有像show-method-signature这样的棘手方法?已经可用?

最佳答案

clojure.reflect 库是你的 friend 。

(require '[clojure [reflect :as r]])

;; Return the method signature for methods matching a given regex.
;; Params:
;;  cls                - a class (eg. java.util.List) or an instance 
;;  method-name-regex  - a regex string to match against the method name 
(defn method-sig [cls method-name-regex]
  (let [name-regex (re-pattern method-name-regex)]
     (filter #(re-matches name-regex (str (:name %)))
             (:members (r/reflect cls)))))

您可以按如下方式使用它:
=> (method-sig java.util.List "add")
;; returns 
({:name add,
  :return-type boolean,
  :declaring-class java.util.LinkedList,
  :parameter-types [java.lang.Object],
  :exception-types [],
  :flags #{:public}}
 {:name add,
  :return-type void,
  :declaring-class java.util.LinkedList,
  :parameter-types [int java.lang.Object],
  :exception-types [],
  :flags #{:public}})

 => (method-sig (java.util.LinkedList.) "add.*") ;; also works

关于clojure - REPL 中的方法签名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19218420/

相关文章:

scala - 如何访问 Scala REPL 中的最后结果?

java - 在 clojure 中调用需要类作为参数的 java 方法

clojure - 将多个参数展开为关键字

javascript - 在线博彩游戏和安全 : How to?

ide - Clojure 开发 : IDE or REPL?

graph - 如何覆盖引用类型的 println 行为

Clojure pedestal.io 代码未在 IntelliJ 中解析

java - Clojure 能否从现有流程中捕获标准?

Clojure 代理 Java 模板

clojure - 翻译字符串的编码