2012-03-30 15 views
5

में प्रतीक कहां परिभाषित किया गया है, मैं काम पर एक बहुत बड़ी रेल परियोजना पर काम करता हूं। कभी-कभी मुझे कक्षा/निरंतर परिभाषाओं का शिकार करने की आवश्यकता होती है। क्या रूबी में मेरे लिए ऐसा करने के लिए कुछ अंतर्निहित विधि है? उदाहरण:देखें कि irb

irb> SOME_CONSTANT.__file__ 
=> /some/path/to/a/file 
+1

क्या आपने अपनी निर्देशिका में "SOME_CONSTANT =" के लिए बस grepping करने की कोशिश की है? –

+0

...................... हाँ? –

उत्तर

1

यह वही नहीं है जो आप खोज रहे हैं, लेकिन करें पर एक .source_location विधि है। आप यह जानने के लिए इसका उपयोग कर सकते हैं कि वास्तव में कक्षा कहां लागू की जाती है। , (के बाद से गहरे लाल रंग का आप कक्षाएं फिर से खोलना की सुविधा देता है, इस को कई जगहों पर हो सकता है)

उदाहरण के लिए

, एक वस्तु का एक उदाहरण दिया मैं:

i.methods.map do |method_name| 
    method_obj = i.method(m) 
    file, line = method_obj.source_location 
    file #map down to the file name 
end.uniq 

आप सभी फ़ाइलें जहां की एक सूची दे देंगे i की विधियां लागू की गई हैं।

यह कक्षाओं के लिए काम करेगा जिनके पास रूबी में कम से कम 1 विधि लागू की गई है। हालांकि, यह स्थिरांक के लिए काम नहीं करेगा।

0

किसी भी फ़ाइल से पहले बहुत शुरुआत में भरी हुई है, एक लाइन है कि वर्ग/निरंतर है कि आप एक मॉड्यूल के अलावा कुछ के रूप में जाँच करना चाहते हैं परिभाषित करता है सम्मिलित किया गया है। उदाहरण के लिए, मान लीजिए कि आपके पास कोड या अन्य प्रकार के निरंतर A हैं, और यह जानना चाहते हैं कि यह कहां परिभाषित किया गया है। फिर, मुख्य फ़ाइल के बहुत शुरुआत में,

A = nil 

तब, जब कार्यक्रम चलाया जाता है, जब भी यह प्रथम श्रेणी की परिभाषा को पूरा करती है/लगातार A लिखते हैं, यह

some_path_to_a_file:line_number in `some_method': A is not a class (TypeError) 
की तरह कुछ दिखा देंगे

या

some_path_to_a_file:line_number: warning: already initialized constant A 

फिर, some_path_to_a_file:line_number स्थान जहां A परिभाषित किया गया है हो जाएगा।

0

यदि आप रूबी 1.9.2 का उपयोग कर रहे हैं, तो @ येन द फर्स्ट का जवाब सही है: विधि ऑब्जेक्ट पर #source_location पर कॉल करें।

यदि आप रूबी 1.8.7 का उपयोग कर रहे हैं, तो #source_location मौजूद नहीं है (अभी तक)। आपको किसी विधि की this implementation जैसी कुछ आवश्यकता होगी। (चारों ओर एक या दो तैरते हैं, लेकिन मुझे दूसरा एक वास्तविक त्वरित नहीं मिल रहा है)।

+1

http://stackoverflow.com/a/13015691/260122 के अनुसार (अब) एक मणि [ruby18_source_location] (https://github.com/ConradIrwin/ruby18_source_location) है जो 'विधि # स्रोत_स्थान' का समर्थन करता है। – clacke

संबंधित मुद्दे