`अगर __name__ == '__main __'` रूबी में बराबर


101

मैं रूबी के लिए नया हूं। मैं एक मॉड्यूल से फ़ंक्शन आयात करना चाह रहा हूं जिसमें एक उपकरण है जिसे मैं अलग से उपयोग करना जारी रखना चाहता हूं। पायथन में मैं बस यही करूंगा:

def a():
    ...
def b():
    ...
if __name__ == '__main__':
    a()
    b()

यह मुझे प्रोग्राम को चलाने या इसे उपयोग करने a()और / या b()अलग से मॉड्यूल के रूप में आयात करने की अनुमति देता है । रूबी में समकक्ष प्रतिमान क्या है?



जवाबों:


130

रूबी से मैंने जंगली (दी गई, टन नहीं) में देखा है, यह एक मानक रूबी डिजाइन पैटर्न नहीं है। मॉड्यूल और स्क्रिप्ट अलग-अलग रहने वाले हैं, इसलिए मुझे आश्चर्य नहीं होगा अगर वास्तव में ऐसा करने का एक अच्छा, साफ तरीका नहीं है।

संपादित करें: यह पाया गया।

if __FILE__ == $0
    foo()
    bar()
end

लेकिन यह निश्चित रूप से आम नहीं है।


4
मॉड्यूल और स्क्रिप्ट को अलग रखने के पीछे क्या तर्क है, जिज्ञासा से बाहर?
इमेजिस्ट

5
मुझे लगता है कि यह वही है जो रूबिस्ट करना पसंद करते हैं। एक मॉड्यूल परिभाषा एक मॉड्यूल परिभाषा है। यदि आप उस मॉड्यूल के साथ कुछ कार्रवाई करना चाहते हैं, तो ठीक है, लेकिन आप जो कार्रवाई कर रहे हैं वह मॉड्यूल परिभाषा नहीं है।
माचिस

8
यह आसान है, हालांकि, चीजों के परीक्षण के लिए - आप वहां मॉड्यूल परीक्षण रख सकते हैं और उन्हें बिना किसी आवरण के केवल मॉड्यूल फ़ाइल से चला सकते हैं।
ईबेनेटर

3
@ आईमैगिस्ट और @ नेटर या इसके आसपास का अन्य तरीका: स्क्रिप्ट एक एकल मॉड्यूल है जिसे कमांडलाइन से चलाने का इरादा है, लेकिन आप इसे भागों में परीक्षण करना भी चाहते हैं और एक अलग मॉड्यूल में परीक्षण कर सकते हैं। उस स्थिति में, NAME == $ 0 अमूल्य है।
भ्रम

16
मैंने यह नहीं देखा है, लेकिन यह नहीं है। आधिकारिक रूबी डॉक्स इसका उपयोग करते हैं: रूबी- lang.org/en/documentation/quickstart/4
cflewis

12

यदि स्टैक ट्रेस खाली है, तो हम दाएं और बाएं निष्पादित करना शुरू कर सकते हैं। मुझे नहीं पता कि रूबी में लगभग एक सप्ताह से पारंपरिक रूप से या अपरंपरागत रूप से उपयोग किया जाता है।

if caller.length == 0
  # do stuff
end

अवधारणा के सुबूत:

फ़ाइल: test.rb

#!/usr/bin/ruby                                                                 

if caller.length == 0
  puts "Main script"
end

puts "Test"

फ़ाइल: shmest.rb

#!/usr/bin/ruby -I .                                                            

require 'test.rb'

puts "Shmest"

उपयोग:

$ ./shmest.rb 
Test
Shmest

$ ./test.rb
Main script
Test

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.