रूबी में, एक नेस्टेड क्लास को परिभाषित करना एक मॉड्यूल में एक क्लास को परिभाषित करने के समान है। यह वास्तव में वर्गों के बीच एक संघ को मजबूर नहीं करता है, यह सिर्फ स्थिरांक के लिए एक नाम स्थान बनाता है। (कक्षा और मॉड्यूल नाम स्थिरांक हैं।)
स्वीकृत उत्तर किसी भी चीज़ के बारे में सही नहीं था। 1 नीचे दिए गए उदाहरण में, मैं कभी-कभी संलग्न मौजूदा वर्ग के उदाहरण के बिना lexically संलग्न वर्ग का एक उदाहरण बनाता हूं।
class A; class B; end; end
A::B.new
मॉड्यूल के लिए फायदे समान हैं: इनकैप्सुलेशन, ग्रुपिंग कोड केवल एक ही स्थान पर उपयोग किया जाता है, और कोड को जहां इसे उपयोग किया जाता है, के करीब रखा जाता है। एक बड़ी परियोजना में एक बाहरी मॉड्यूल हो सकता है जो प्रत्येक स्रोत फ़ाइल में बार-बार होता है और इसमें बहुत अधिक वर्ग परिभाषाएँ होती हैं। जब विभिन्न रूपरेखा और पुस्तकालय कोड सभी ऐसा करते हैं, तो वे संघर्ष के अवसर को कम करते हुए, शीर्ष स्तर पर केवल एक नाम का योगदान करते हैं। प्रोसिक, सुनिश्चित होने के लिए, लेकिन यही कारण है कि उनका उपयोग किया जाता है।
बाहरी नाम स्थान को परिभाषित करने के लिए एक मॉड्यूल के बजाय एक वर्ग का उपयोग करना एक फ़ाइल प्रोग्राम या स्क्रिप्ट में समझ में आ सकता है, या यदि आप पहले से ही किसी चीज़ के लिए शीर्ष स्तर की कक्षा का उपयोग करते हैं, या यदि आप वास्तव में कक्षाओं को एक साथ जोड़ने के लिए कोड जोड़ने जा रहे हैं। सही आंतरिक-वर्ग शैली में। रूबी के पास आंतरिक कक्षाएं नहीं हैं, लेकिन कोड में समान व्यवहार के बारे में बनाने से कुछ भी नहीं रोकता है। आंतरिक वस्तुओं से बाहरी वस्तुओं को संदर्भित करना अभी भी बाहरी वस्तु के उदाहरण से डॉटिंग की आवश्यकता होगी, लेकिन कक्षाओं के घोंसले से पता चलता है कि यह वही है जो आप कर रहे हैं। एक सावधानी से संचालित कार्यक्रम हमेशा संलग्न वर्गों को पहले बना सकता है, और वे यथोचित रूप से नेस्टेड या आंतरिक वर्गों के साथ विघटित हो सकते हैं। आप new
किसी मॉड्यूल पर कॉल नहीं कर सकते ।
आप स्क्रिप्ट के लिए भी सामान्य पैटर्न का उपयोग कर सकते हैं, जहाँ नाम स्थान की बहुत ज़रूरत नहीं है, बस मज़े और अभ्यास के लिए ...
#!/usr/bin/env ruby
class A
class Realwork_A
...
end
class Realwork_B
...
end
def run
...
end
self
end.new.run
Car.new
औरCar::Wheel.new
। आपको निश्चित रूप से रूबी में एकCar
ऑब्जेक्ट को इनिशियलाइज़ करने के लिए किसी ऑब्जेक्ट को इनिशियलाइज़ करने की आवश्यकता नहीं हैCar::Wheel
, लेकिनCar
क्लास को लोड किया जाना चाहिए औरCar::Wheel
प्रयोग करने योग्य होना चाहिए।