मुझे पता है कि कक्षा विधि बताती है कि किसी ऑब्जेक्ट के वर्ग का नाम क्या है, मैं invoking विधि का नाम कैसे जान सकता हूं? क्या यह जानने का कोई तरीका है?क्या आविष्कार विधि जानने का कोई तरीका है?
उत्तर
Examining the Ruby Call Stack शेयरों इस जानकारी:
क्या तुमने कभी यह करने के लिए एक अपवाद को ऊपर उठाने के बिना कॉल स्टैक को देखने के लिए करना चाहता था है?
caller.each {|c| puts c}
फोन करने वाले एक kernal विधि आप यह कर देता है कि, तो फोन करने वाले [0] आप समारोह के तत्काल फोन करने वाले को पता चल जाएगा है।
पाने के लिए एक त्वरित हैक केवल फ़ंक्शन का नाम हो सकता है
caller[0][/`\S+/].chop[1..-1]
यह एक स्ट्रिंग है, जो आप तो फिर भी आप
चाहते का उपयोग कर सकते रूबी के रूप में बुला विधि का नाम वापस आ जाएगी Kernel#caller
का कार्यान्वयन प्रदर्शन और कचरा संग्रहण कारणों के लिए String
एस के साथ किया गया था। आप और अधिक परिष्कृत कॉल स्टैक विश्लेषण करना चाहते हैं, इस ब्लॉग पोस्ट पर एक नज़र डालें:
http://eigenclass.org/hiki/ruby+backtrace+data
लेखक एक बेहतर कॉल स्टैक वस्तु ग्राफ के दो विभिन्न कार्यान्वयन, एक के साथ शुद्ध रूबी में लागू माध्यम से चला जाता (व्यापक रूप से ज्ञात नहीं) Kernel#set_trace_func
विधि और दूसरा जो एमआरआई के लिए सी एक्सटेंशन के रूप में काम करता है।
एक उत्पादन अनुप्रयोग को रूबी के साथ आने वाले Kernel#caller
कार्यान्वयन के अलावा कुछ भी उपयोग नहीं करना चाहिए। यदि आप बड़े पैमाने पर विस्तार का उपयोग करते हैं तो आप शायद रूबी की क्षमता को प्रभावी रूप से एकत्रित करने की क्षमता को खत्म कर देंगे और परिमाण के कई आदेशों तक आपकी प्रक्रिया (अनुमान लगाएं) धीमा कर देंगे।
आप कुछ इस तरह लिख सकते हैं:
module Kernel
private
def who_is_calling? # Or maybe def who_just_called?
caller[1] =~ /`([^']*)'/ and $1
end
end
और फिर आप इन छोटे परीक्षण है:
irb(main):056:0* def this_is_a_method
irb(main):057:1> puts "I, 'this_is_a_method', was called upon by: '#{who_is_calling?}'"
irb(main):058:1> end
=> nil
irb(main):059:0> def this_is_a_method_that_calls_another
irb(main):060:1> this_is_a_method
irb(main):061:1> end
=> nil
irb(main):062:0> this_is_a_method_that_calls_another
I, 'this_is_a_method', was called upon by: 'this_is_a_method_that_calls_another'
=> nil
irb(main):063:0> this_is_a_method
I, 'this_is_a_method', was called upon by: 'irb_binding'
=> nil
irb(main):064:0>
ऐसा नहीं है कि यह एक वैध सवाल और सभी, लेकिन कॉल को देखने के लिए नहीं होने है
- 1. क्या एडब्ल्यूएस खाते की उम्र जानने का कोई तरीका है?
- 2. लॉन्च प्रोग्राम के ढक्कन को जानने का कोई तरीका है?
- 3. जावा में कक्षा का आविष्कार क्या है?
- 4. क्या एसिंक विधि का परीक्षण करने का कोई तरीका है?
- 5. क्या कोई विधि सिंक्रनाइज़ करने का एक ग्रोवी तरीका है?
- 6. क्या यह जानने का कोई तरीका है कि किस कंपाइलर ने स्थिर पुस्तकालय बनाया है?
- 7. क्या यह जानने का कोई तरीका है कि ContextNotActiveException को पकड़ने के बिना कोई राज्य सक्रिय है या नहीं?
- 8. क्या Win32 सेमफोर की वर्तमान गणना जानने का कोई तरीका है?
- 9. क्या कोई मौजूदा संपत्ति या विधि तक पहुंचने का प्रयास करने का कोई तरीका है?
- 10. UIActivityViewController - क्या यह जानने का कोई तरीका है कि कौन सी गतिविधि का चयन किया गया था?
- 11. क्या वीबीए में ऐसे चर के बारे में जानने का कोई तरीका है जिनका उपयोग नहीं किया जा रहा है?
- 12. यह जानने का सही तरीका है कि कोई गतिविधि नष्ट हो गई है
- 13. कोई आइटम जावास्क्रिप्ट सरणी में है या नहीं, यह जानने का सबसे अच्छा तरीका है?
- 14. विधि से बेनामी प्रकार वापस करने का कोई तरीका है?
- 15. क्या ऐसा करने का कोई तरीका है?
- 16. क्या JQuery का उपयोग कर किसी तत्व पर स्क्रॉलबार है या नहीं, यह जानने का कोई तरीका है?
- 17. क्या कॉल करने योग्य विधि में कोई तर्क लेने का कोई तरीका है?
- 18. क्या httpwebrequest का निपटान करने का कोई सही तरीका है?
- 19. क्या यह जानने के लिए History.js में कोई तरीका है कि बैक बटन दबाया गया था
- 20. कोई तरीका यह कैसे ढूंढें कि कोई विधि विशिष्ट इंटरफ़ेस
- 21. क्या आईओएस में ऐप हटाए जाने का कोई तरीका है?
- 22. क्या JVM के भीतर से बताने का कोई तरीका है कि क्या एक विशेष विधि जेआईटी संकलित की गई है?
- 23. क्या कोई संदर्भ पता प्राप्त करने का कोई तरीका है?
- 24. क्या कोई लेबल अक्षम करने का कोई तरीका है?
- 25. क्या कोई जेड-इंडेक्स सर्कल करने का कोई तरीका है?
- 26. क्या कोई सेट बनाने का कोई त्वरित तरीका है?
- 27. क्या स्कैला कंसोल में घोषित विधि का कोड दिखाने का कोई त्वरित तरीका है?
- 28. क्या यह जानने का कोई तरीका है कि किसी ने आपकी वेबसाइट बुकमार्क की है या नहीं?
- 29. क्या किसी अन्य प्रक्रिया में थ्रेड आईडी को जानने का कोई तरीका है जो अपवाद फेंकता है?
- 30. क्या यह जानने का कोई तरीका है कि किसी अन्य एप्लिकेशन ने कोको में डिस्प्ले रिज़ॉल्यूशन बदल दिया है?
ढेर आमतौर पर मतलब है कि आप कुछ गलत कर रहे हैं। –