module A
def self.func
puts "func"
end
end
>> A.func
func
>> A::func
func
.
और ::
दोनों क्यों मौजूद हैं? क्यों न केवल .
?रूबी में मॉड्यूल कार्यों को accesing के दोनों तरीके क्यों मौजूद हैं?
module A
def self.func
puts "func"
end
end
>> A.func
func
>> A::func
func
.
और ::
दोनों क्यों मौजूद हैं? क्यों न केवल .
?रूबी में मॉड्यूल कार्यों को accesing के दोनों तरीके क्यों मौजूद हैं?
स्कोप रिज़ॉल्यूशन ऑपरेटर (::
) स्थिरांक, उदाहरण विधियों और वर्ग विधियों को हल कर सकता है, ताकि जब तक हम सही जगह पर देख रहे हों, हम उस ऑपरेटर को अनिवार्य रूप से किसी भी विधि के लिए उपयोग कर सकते हैं।
इसके अतिरिक्त, विधि "func" को मॉड्यूल ए (self.func
द्वारा, "स्थैतिक" विधि के समान) के क्लास विधि के रूप में परिभाषित किया गया है, यह सीधे मॉड्यूल से संबंधित है (जो स्वयं एक ऑब्जेक्ट है) ताकि यह हो सके मॉड्यूल के साथ रिसीवर के रूप में डॉट ऑपरेटर के साथ बुलाया। ध्यान दें कि मॉड्यूल एक के उदाहरण के बाद से यह एक वर्ग विधि है, किसी भी दृश्यता के लिए "समारोह" की जरूरत नहीं है:
aye = Object.new.extend(A)
aye::funC# raises NoMethodError
aye.func # raises NoMethodError
तो विधि एक उदाहरण विधि तो यह केवल पर डॉट ऑपरेटर के साथ कहा जा सकता है के रूप में परिभाषित किया गया था मॉड्यूल के उदाहरण।
module B
def func2
puts "OK!"
end
end
B::func2 # raises NoMethodError
B.func2 # raises NoMethodError
bee = Object.new.extend(B)
bee::func2 # "OK!"
bee.func2 # "OK!"
@RHSeeger, क्योंकि रूबी एक उत्तरआधुनिक भाषा है: वहाँ सिर्फ एक ही रास्ता एक काम करने के लिए होने की जरूरत नहीं है (और यह भी एक से अधिक है करने के लिए बेहतर माना जा सकता है)। सी, जावा, और सी में एक न्यूनतम भाषा कोर, रूबी में वास्तव में खेल नहीं है। –
@Wayne: मेरी टिप्पणी हटा दी गई क्योंकि मैंने गलत सवाल किया था और गलत तरीके से प्रस्तुत किया था। मैंने इसे "अंतर क्या है" के रूप में पढ़ा जब असली सवाल था "दोनों क्यों हैं, क्योंकि वे एक ही बात हैं"। हालांकि मुझे यकीन नहीं है कि मैरिक्स का जवाब यह स्पष्ट रूप से पर्याप्त उत्तर देता है, मेरी टिप्पणी वास्तव में उपयुक्त नहीं है। – RHSeeger
एक यादृच्छिक बोली के रूप में, मैं दृढ़ता से राय मानता हूं कि "पोस्टमोडर्न" एक प्रोग्रामिंग भाषा लेबल करने का एक बुरा तरीका है। मैं रूबी को एक आधुनिक प्रोग्रामिंग भाषा कहूंगा, जिसका अर्थ है कि यह प्रोग्रामिंग भाषा डिजाइन में कई विकास का लाभ उठाता है जो कि कुछ आसान बनाने और अभिव्यक्तिपूर्ण (बनाए रखने में आसान) है। ऐसा कहा जा रहा है, रूबी के बारे में वास्तव में कुछ भी क्रांतिकारी नहीं है। मुझे भाषा पसंद है और लगता है कि यह अन्य भाषाओं की विशेषताओं का एक बड़ा संयोजन है, लेकिन मैं उस तालिका में लाए गए किसी भी चीज़ के बारे में नहीं सोच सकता जो पिछली भाषाओं से छलांग थी। – RHSeeger