मान लीजिए कि मेरे पास निम्नलिखित स्क्रिप्ट हैं।

script1.rb

x=1

script2.rb

# Something like: import script1
y=2
puts x+y

क्या इन लिपियों को "मर्ज" करना संभव है, यानी किसी भी तरह से "import" script1.rb को script2.rb में डाल दिया जाए, ताकि script2.rb चलकर "3" प्रिंट हो जाए?

मैंने पहले ही require_relative, load जैसे कथन आज़मा लिए हैं, लेकिन परिणाम है:

b.rb: 4: के लिए <main>': undefined local variable or method x ’में मुख्य: ऑब्जेक्ट (NameError)

1
Robert Strauch 20 नवम्बर 2015, 00:56

2 जवाब

सबसे बढ़िया उत्तर

हाँ:

require_relative 'yourOtherFile'

आपको अंत में .rb से निपटने की आवश्यकता नहीं है। require_relative में "रिश्तेदार" भाग का अर्थ है "उसी फ़ोल्डर में देखो जो मैं अन्य फ़ाइल के लिए हूं"

यदि आप फ़ाइल A से फ़ाइल B में एक चर का उपयोग करना चाहते हैं तो आपको इसे एक वैश्विक ($x = 5) बनाना होगा। यह काम करेगा, लेकिन अपने कोड को व्यवस्थित करने का एक शानदार तरीका नहीं है (क्योंकि यह एक ऐसे वातावरण के लिए बनाता है जहां वैश्विक स्कोप बहुत सारे विभिन्न चर के साथ प्रदूषित होता है।

आपको अपना कोड कक्षाओं में व्यवस्थित करना चाहिए:

class Planet
  @@x = 0

  def self.doStuffToX
    @xx += 4
  end

  def self.getX
    @@x
  end  
end

और आपको इस फ़ाइल की आवश्यकता हो सकती है, फिर x को एक्सेस और बदलने के लिए Plant.getX और Plant.doStuffToX का उपयोग करें।

3
David Zorychta 19 नवम्बर 2015, 22:09

हां, require_relative का उपयोग करके, लेकिन यह केवल वैश्विक चर और स्थिरांक के लिए काम करेगा। यह एक अच्छी बात है।

लोड किए गए स्रोत फ़ाइल के भीतर कोई भी स्थिरांक या ग्लोबल्स कॉलिंग प्रोग्राम के वैश्विक नामस्थान में उपलब्ध होंगे। हालाँकि, स्थानीय चर लोडिंग वातावरण के लिए प्रचारित नहीं किया जाएगा।

script1.rb

X = 1

script2.rb

require_relative 'script1.rb'

y = 2
puts X + y

एक निरंतर का उपयोग करने के लिए यह ठीक है, कुछ भी इसे बदल नहीं सकता है।

लेकिन अगर आप x को बदलना चाहते हैं, तो यह एक वैश्विक चर $x होना चाहिए और यह अच्छा नहीं है। ग्लोबल्स से बचा जाना चाहिए क्योंकि यह नियंत्रित करना मुश्किल है कि उनका उपयोग कैसे किया जाता है या संशोधित किया जाता है। आपको कक्षा बनाने के लिए script1.rb कोड को फिर से डिज़ाइन करना चाहिए।

1
Schwern 19 नवम्बर 2015, 22:03