क्लोजर में आत्मनिरीक्षण करने का सबसे अच्छा तरीका क्या है? क्या पाइथन के dir
फ़ंक्शन की तरह कुछ है? मैं जावा क्लास पर उपलब्ध विधियों को खोजने में विशेष रूप से रूचि रखता हूं जिनके साथ मैं इंटरऑपरेट कर रहा हूं, लेकिन मुझे आत्मनिरीक्षण से संबंधित क्लोजर में उपलब्ध कुछ भी खोजने में भी रूचि है।क्लोजर में आत्मनिरीक्षण
उत्तर
आप तरीकों की खोज करना चाहते हैं, सिर्फ सादा जावा प्रतिबिंब का उपयोग करें:
(-> {:a 1} .getClass .getDeclaredMethods pprint)
या
(-> clojure.lang.PersistentArrayMap .getDeclaredMethods pprint)
:
user=> (.getDeclaredMethods (.getClass {:a 1}))
#<Method[] [Ljava.lang.reflect.Method;@72b398da>
user=> (pprint *1)
[#<Method private int clojure.lang.PersistentArrayMap.indexOf(java.lang.Object)>,
#<Method public int clojure.lang.PersistentArrayMap.count()>,
#<Method public java.util.Iterator clojure.lang.PersistentArrayMap.iterator()>,
#<Method public boolean clojure.lang.PersistentArrayMap.containsKey(java.lang.Object)>,
#<Method public int clojure.lang.PersistentArrayMap.capacity()>,
#<Method public clojure.lang.IPersistentMap clojure.lang.PersistentArrayMap.empty()>,
...
आप भी इसे एक छोटे से अच्छे एक सूत्रण मैक्रो के साथ लिख सकते हैं
(मैंने अभी #clojure आईआरसी से सीखा है कि कक्षा का नाम पहले से ही क्लास ऑब्जेक्ट है!)
'(.getDeclaredMethods (कक्षा {: ए 1})) 'काम भी करता है। – Mars
यदि आप 1.3 का उपयोग कर रहे हैं, तो clojure.reflect है जो आपको जावा कक्षाओं के बारे में जानकारी का निरीक्षण, कुशलतापूर्वक इत्यादि की अनुमति देता है। मैं पुराने contrib से clojure.contrib.repl-utils/show का भी शौकीन हूं यदि यह आपके लिए एक विकल्प है।
विशेष रूप से clojure.contrib.repl-utils
, और show
देखें।
http://richhickey.github.com/clojure-contrib/repl-utils-api.html#clojure.contrib.repl-utils/show
ये आप आरईपीएल में वस्तुओं और कक्षाओं आत्मनिरीक्षण करने के लिए उपयोगिताओं रहे हैं, लेकिन कोड कैसे प्रोग्राम के वर्गों का पता लगाने के का एक अच्छा उदाहरण है।
मिचिल बोर्केंट और डेव रे में इंटरऑप विकल्प शामिल हैं।
क्लोजर फ़ंक्शंस की खोज के लिए, clojure.repl
नामस्थान में कुछ विकल्प हैं (जो पहले से ही आपके आरपीएल में डिफ़ॉल्ट रूप से संदर्भित हैं)।
dir
:
=> (require 'clojure.set)
nil
=> (dir clojure.set)
difference
index
intersection
join
map-invert
project
rename
rename-keys
select
subset?
superset?
union
apropos
:
=> (apropos #"^re-")
(re-pattern re-matches re-matcher re-groups re-find re-seq)
find-doc
:
=> (find-doC#"^re-")
-------------------------
clojure.core/re-find
([m] [re s])
Returns the next regex match, if any, of string to pattern, using
java.util.regex.Matcher.find(). Uses re-groups to return the
groups.
-------------------------
clojure.core/re-groups
([m])
Returns the groups from the most recent match/find. If there are no
nested groups, returns a string of the entire match. If there are
nested groups, returns a vector of the groups, the first element
being the entire match.
-------------------------
....
एक वर्ग द्वारा कार्यान्वित इंटरफेस ढूंढने के लिए, कोशिश supers
(supers clojure.lang.PersistentHashMap)
clojure.contrib.repl-utils
clojure.reflect
ले जाया गया है।
अब आप निम्नलिखित के रूप में यह कॉल कर सकते हैं:
(->> (clojure.reflect/reflect java.lang.String)
:members
clojure.pprint/pprint)
- 1. आत्मनिरीक्षण
- 2. सामान्य लिस्प में कक्षा आत्मनिरीक्षण
- 3. पायथन: व्यावहारिक आत्मनिरीक्षण
- 4. कार्यात्मक प्रोग्रामिंग भाषा आत्मनिरीक्षण
- 5. Django-South आत्मनिरीक्षण नियम
- 6. जावा पैकेज आत्मनिरीक्षण
- 7. रूबी में चीजों का आत्मनिरीक्षण कैसे करूं?
- 8. पायथन जोर - विफलता के आत्मनिरीक्षण में सुधार?
- 9. डी: फ़ंक्शन पैरामीटर नाम आत्मनिरीक्षण
- 10. जावास्क्रिप्ट ऑब्जेक्ट आत्मनिरीक्षण कैसे करें?
- 11. घोषणात्मक कक्षाओं के SQLAlchemy आत्मनिरीक्षण
- 12. क्लोजर क्लोजर
- 13. मैं SQL सर्वर पर आत्मनिरीक्षण कैसे करूं?
- 14. win32com मॉड्यूल/पायथनॉम मॉड्यूल का आत्मनिरीक्षण
- 15. "आत्मनिरीक्षण-आधारित कोड पूर्णता" क्या है?
- 16. मैं पाइथन 2.x में ऑब्जेक्ट पर आत्मनिरीक्षण कैसे करूं?
- 17. क्लोजर संपादक क्लोजर
- 18. क्लोजर (fkmeans) क्लोजर
- 19. क्लोजर
- 20. क्लोजर
- 21. क्लोजर
- 22. क्लोजर
- 23. क्लोजर
- 24. क्लोजर
- 25. क्लोजर
- 26. क्लोजर
- 27. क्लोजर
- 28. क्लोजर
- 29. क्लोजर
- 30. क्लोजर
शायद clojure.reflect रूप में अच्छी तरह जांच कर रहे लायक है। http://clojure.github.io/clojure/clojure.reflect-api।एचटीएमएल – claj