markdown Clojure中Java类的漂亮打印方法。在REPL中有用。

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了markdown Clojure中Java类的漂亮打印方法。在REPL中有用。相关的知识,希望对你有一定的参考价值。

(defn print-methods
  "For a class 'x', print the methods (ordered by their name) in
   the following fashion:
   
   <methodName>(<parameters if any>) -> <return value>"
  [x]
  (let [meth-seq    (-> x class .getMethods seq)
        ordered-seq (sort-by #(.getName %) meth-seq)
        params      (fn [m] 
                      (let [ptypes (.getParameterTypes m)]
                        (if (= 0 (count ptypes))
                          ""
                          (clojure.string/join ", "
                            (for [x ptypes]
                              (.getName x))))))]
    (printf "class %s\n-----------\n" (-> x class .getName))
    (doseq [m ordered-seq]
      (printf "%s(%s) -> %s\n" (.getName m) (params m) (.getReturnType m)))))
The function `print-methods` is intended to be used inside a REPL. Just copy and paste it to your REPL and enjoy:

```clojure
main=> ; paste print-methods
main=> (print-methods 1)
class java.lang.Long
-----------
bitCount(long) -> int
byteValue() -> byte
compare(long, long) -> int
;...
```

以上是关于markdown Clojure中Java类的漂亮打印方法。在REPL中有用。的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Clojure 中调用公共类的非公共方法?

markdown Clojure clj中协议和记录的简要示例

在Clojure REPL中使用自定义Java类

markdown rss中的关键词统计来自clojure的快乐

markdown clojure实现git gc垃圾回收处理文件io clj文件处理

markdown 列表交叉合并类似Python中的zip功能(clojure clj ruby​​ scala map vector list)