2011-01-09 38 views
15

Có ai biết nếu có một tương đương Clojure cho Pythons "dir". Về cơ bản, tôi cần biết các hàm mà tôi có thể gọi trên một cái gì đó hoặc cụ thể hơn cho các đối tượng java. Tôi muốn biết các phương thức và thuộc tính có sẵn (Tôi không chắc chắn nếu trong java chúng được gọi là phương thức và thuộc tính, đây là C# lingo).Python "dir" tương đương trong Clojure

Trả lời

15

clojure.contrib.repl-utils/show để sử dụng ở 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[]) 
... 

Ngoài ra, có lẽ cái gì đó như:

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

.getFields.getConstructors cho phù hợp.

8

Các namespace clojure.repl (trong đó có sẵn từ Clojure 1.2) chứa vĩ mô dir và chức năng 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

Ồ, tôi đã bỏ lỡ sự ra đời của 'clojure.repl' (không có nhiều thời gian cho Clojure atm) - tốt để biết. Nhưng làm thế nào để bạn sử dụng nó với các công cụ Java, như được hỏi bởi OP? '(clojure.repl/dir String)' không hoạt động đối với tôi. – danlei

+0

Đúng, nó chỉ dành cho các không gian tên Clojure. – Jonas

+0

Tôi tự hỏi tại sao họ không bao gồm một cái gì đó như 'show' trong clojure.repl sau đó. Dù sao, 1 cho bạn đề cập đến nó. – danlei

Các vấn đề liên quan