2011-01-09 50 views
15

有人知道Pythons「dir」是否有Clojure等價物。基本上我需要知道我可以調用的某些或更具體的Java對象的函數我想知道可用的方法和屬性(我不確定是否在java中它們被稱爲方法和屬性,這是C#術語)。Clojure中的Python「dir」相當於

回答

15

clojure.contrib.repl-utils/show用於在REPL使用:

user=> (use '[clojure.contrib.repl-utils :only (show)]) 
nil 
user=> (show String) 
=== public final java.lang.String === 
[ 0] static CASE_INSENSITIVE_ORDER : Comparator 
[ 1] static copyValueOf : String (char[]) 
[ 2] static copyValueOf : String (char[],int,int) 
[ 3] static format : String (Locale,String,Object[]) 
[ 4] static format : String (String,Object[]) 
... 

或者,也許是這樣的:

user=> (map #(.getName %) (.getMethods String)) 
("equals" "toString" "hashCode" "compareTo" ...) 

.getFields,並.getConstructors相應。

8

clojure.repl的命名空間(這是因爲Clojure的1.2提供)包含宏dir和功能dir-fn

user=> (clojure.repl/dir clojure.main) 
load-script 
main 
repl 
... 

user=> (clojure.repl/dir-fn 'clojure.main) 
(load-script main repl repl-caught repl-exception 
repl-prompt repl-read skip-if-eol skip-whitespace 
with-bindings) 
+0

啊,我錯過了介紹clojure.repl`的`(未那麼多時間爲Clojure的大氣壓) - 很高興知道。但是,按照OP的要求,如何將它與Java的東西結合使用呢? `(clojure.repl/dir字符串)`不適合我。 – danlei 2011-01-09 08:15:25