2011-08-03 11 views
9

रूबी में "मॉड्यूल ..." के बजाय "::" का उपयोग करके रूबी में, class Foo::Bar और module Foo; class Bar लिखने के लिए नामांकन के बीच कोई अंतर है? यदि ऐसा है तो क्या?रुबी नेमस्पेसिंग

उत्तर

8

आप class Foo::Bar उपयोग करें, लेकिन Foo मॉड्यूल अभी तक निर्धारित नहीं किया गया है, तो एक अपवाद है, बढ़ा दी जाएगी जबकि module Foo; class Bar विधि Foo परिभाषित करेगा अगर यह अभी तक निर्धारित नहीं किया गया।

module Foo 
    class Bar; end 
    class Baz; end 
end 
+2

इसके अलावा, अगर 'Foo' एक के रूप में परिभाषित किया गया था

इसके अलावा, ब्लॉक प्रारूप के साथ, आप कई वर्गों के भीतर निर्धारित कर सकते हैं वर्ग 'फू :: बार' अपवाद नहीं बढ़ाएगा जबकि 'मॉड्यूल फू; 'फू' एक मॉड्यूल नहीं बल्कि एक वर्ग है, क्योंकि''' टाइपरर 'बढ़ाएगा। – robertodecurnex

6

इसके अलावा रूबी ismness के इस उत्सुक सा नोटिस:

FOO = 123 

module Foo 
    FOO = 555 
end 

module Foo 
    class Bar 
    def baz 
     puts FOO 
    end 
    end 
end 

class Foo::Bar 
    def glorf 
    puts FOO 
    end 
end 

puts Foo::Bar.new.baz # -> 555 
puts Foo::Bar.new.glorf # -> 123 
+0

क्या आप इस बारे में कुछ स्पष्टीकरण प्रदान कर सकते हैं कि यह आपके उदाहरण में क्यों हो रहा है? मुझे लगता है कि दूसरा कॉल 555 भी लौटाएगा। – wmock

+0

@WillsonMock अच्छा सवाल। मैं इसके लिए लगभग एक नया SO सवाल खोलूंगा। जब मैंने यह लिखा, तो मुझे जवाब वापस मिला, लेकिन अब मुझे यह याद नहीं है और इसे फिर से नहीं मिला। इसे यहां जवाब में भी पोस्ट करना चाहिए था: -/वर्गों के साथ भी बीटीडब्ल्यू होता है। न केवल मॉड्यूल। – Casper

+2

ठंडा, यदि आप अनुसरण करना चाहते हैं, तो यह नया एसओ प्रश्न है जिसे मैंने पोस्ट किया है: http://stackoverflow.com/questions/15119724/ruby-lexical-scope-vs-inheritance – wmock