2013-08-20 7 views
8

क्या इस विधि को लागू होने पर रूबी विधि को लागू करने वाली विधियों की सूची प्राप्त करने का कोई तरीका है?मैं रूबी विधि निर्भरताओं को कैसे ढूंढ सकता हूं?

उदाहरण के लिए:

def foo 
    puts "foo" 
end 

def foo2 
    foo 
end 

मुझे पता है कि जब "foo2" बुला यह 1 "foo" और 2 "कहते हैं" और इसी फ़ाइलों इन तरीकों में परिभाषित कर रहे हैं कॉल करना चाहते हैं। (यदि अन्य विधियों को "रखता है", तो मैं उन्हें भी जानना चाहूंगा)

क्या यह संभव है? और अगर 'हां' कैसे? मैं कह सकता हूं कि मेरा प्रश्न विधि निर्भरताओं को ढूंढने के बारे में है।

+2

आपको ऐसा करने की कोशिश करने के लिए फ्लेक पकड़ने की संभावना है; यह जानने के लिए एक विधि की ज़िम्मेदारी नहीं है कि इसे कौन कॉल कर सकता है (या इसे किसने कहा है)। आप अपना लक्ष्य/समस्या साझा करना चाहते हैं और देख सकते हैं कि क्या अधिक उपयुक्त समाधान नहीं हैं और खराब कोड लिखने में मदद करने वाले किसी भी व्यक्ति की चिंता को कम करने में मदद करें। :) – coreyward

+10

स्थिर नियंत्रण प्रवाह विश्लेषण रूबी जैसे गतिशील भाषा के लिए बहुत कठिन है। –

+2

एक हैक की तरह लगता है। यदि आपको किसी विशिष्ट क्रम में होने वाली कार्रवाइयों की आवश्यकता है, तो उन्हें एक ही विधि में क्यों न रखें ताकि यह स्पष्ट हो? शायद आप एक अलग सवाल पूछ रहे हैं, लेकिन आपका उदाहरण कोड यह स्पष्ट नहीं करता है * क्यों * आप एक स्थिर प्रवाह को लागू करना चाहते हैं। क्या आपके पास एक वास्तविक दुनिया का उदाहरण है? – jefflunt

उत्तर

4

आप इसे set_trace_func का उपयोग करके प्राप्त कर सकते हैं, लेकिन चूंकि रूबी गतिशील है, इसलिए आपको कॉल ऑर्डर मुद्रित करने के लिए विधियों को कॉल करने के लिए टेस्ट कोड की भी आवश्यकता होगी।

set_trace_func proc { |event, filename, line, id, binding, klass| puts "#{klass}##{id}" } 

रूबी 2.0 में, TracePoint एक बेहतर विकल्प है।

4

स्टेटिक कोड विश्लेषण, विशेष रूप से आप जो करना चाहते हैं (एक विधि के भीतर बुलाए गए सभी तरीकों को सूचीबद्ध करना), रूबी (असंभव के करीब) में बहुत कठिन है क्योंकि भाषा गतिशील है और बहुत मजबूत मेटाप्रोग्रामिंग तकनीकों की अनुमति देती है। यहां तक ​​कि पार्सर स्वयं को विधियों को तब तक नहीं जानता जब तक कि यह कोड निष्पादित करने का प्रयास न करे।

उदाहरण: फ़ाइल से कोड पढ़ने के साथ eval कॉलिंग।

+0

तो, मुझे लगता है कि आपका उत्तर 'नहीं' है, ऐसा कोई तरीका नहीं है कि मैं ऐसा कर सकूं। मैं इसे एक उत्तर के रूप में स्वीकार कर सकता हूं, लेकिन अन्य संभावित उत्तरों को इकट्ठा करने के लिए हम अन्य सहयोगियों को कुछ और समय दें। –

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