मैं रूबी (2.4.1p111) और लोड विधि के साथ प्रयोग कर रहा हूं और इसमें कुछ अजीब व्यवहार है:
मेरे पास दो फाइलें हैं:
mytest.rb:
class MyClass
def self.greet(param)
puts "Got called: #{param}"
end
greet 'Called locally'
load "./testld.rb"
end
और लोड की गई फ़ाइल:
testld.rb:
greet 'Called by load'
मैं प्रलेखन से समझ गया कि testld.rb से लोड किया गया कोड और MyClass में विधि कॉल को समान व्यवहार करना चाहिए। इसके बजाय, मुझे मिल रहा है:
-bash-4.2$ ruby mytest.rb
Got called: Called locally
/Blacksmith/RB/testld.rb:1:in `<top (required)>': undefined method `greet'
for main:Object (NoMethodError)
from mytest.rb:9:in `load'
from mytest.rb:9:in `<class:MyClass>'
from mytest.rb:1:in `<main>'
कोई विचार मैं क्या गलत करता हूँ?
0
Pavel
9 अगस्त 2017, 17:18
2 जवाब
सबसे बढ़िया उत्तर
आपको MyClass.greet
को testld.rb
में कॉल करने की आवश्यकता है, ऐसा इसलिए है क्योंकि greet
कक्षा MyClass
में परिभाषित एक वर्ग विधि है।
यहां< /a> वर्ग विधियों के लिए प्रलेखन है।
2
MatayoshiMariano
9 अगस्त 2017, 17:27
जहाँ भी आप कोई फ़ाइल लोड करते हैं, लोड की गई फ़ाइल का मूल्यांकन हमेशा मुख्य परिवेश में किया जाता है। testld.rb
के मुख्य वातावरण में self
का मान संपूर्ण स्क्रिप्ट का मुख्य वातावरण है। इसलिए, आपका
greet 'Called by load'
के बराबर नहीं है
MyClass.greet 'Called by load'
जैसा कि आपने उम्मीद की थी।
1
sawa
9 अगस्त 2017, 17:43