रूबी क्लास Foo::Bar
पर विचार करें।रूबी बनाम मॉड्यूल के साथ रूबी नेमस्पेसिंग?
सम्मेलन 'फू' नाम स्थान एक मॉड्यूल होने के लिए है, लेकिन यह बस के रूप में आसानी से एक वर्ग हो सकता है:
module Foo; class Bar; end; end
बनाम:
class Foo; class Bar; end; end
दूसरे मामले में, Bar
Foo
की आंतरिक कक्षा नहीं है, यह Foo
के सिंगलटन पर परिभाषित एक और स्थिर है। सुपरक्लास दोनों मामलों में ऑब्जेक्ट है और उनमें केवल कर्नेल मॉड्यूल शामिल है। उनके पूर्वजों की श्रृंखला समान हैं।
तो, संचालन के अलावा आप अपनी कक्षा के आधार पर Foo
के साथ बना सकते हैं (यदि कक्षा में तत्काल हो, तो मॉड्यूल को विस्तारित/शामिल करें), क्या नामस्थान की प्रकृति Bar
पर कोई प्रभाव डालती है? क्या किसी दूसरे पर नाम-अंतर को चुनने के लिए अनिवार्य कारण हैं?
एकमात्र अजीब चीजें जो मैं देखता हूं आप कर सकते हैं Foo::Bar.new.extend Foo
और Foo.new.class::Bar
क्रमशः।
class Foo
Bar = Struct.new(:something) do
def digest
puts "eating #{something}"
end
end
def eat(something)
Bar.new(something).digest
end
end
निकटतम मैं इस चर्चा करने के लिए मिला:
एक वर्ग एक वर्ग में परिभाषित की मेरा अपना सबसे आम उपयोग एक सहायक struct/वर्ग है कि केवल वर्ग द्वारा आंतरिक रूप से इस्तेमाल किया जा करने के लिए है हो सकता है "Using Class vs Module for packaging code in Ruby" में है।
दिलचस्प है, मैं देख रहा हूँ वहाँ रेल में एक संबंधित मुद्दा था const_missing http://bugs.ruby-lang.org/issues/2740 – BF4