मैं तिथि का उप-वर्ग बनाना चाहता हूं।दिनांक क्यों नहीं है। नया प्रारंभ नहीं है?
एक सामान्य, स्वस्थ, युवा rubyist, दिनांक के कार्यान्वयन निम्नलिखित तरीके से इस बारे में जाना होगा की लत से unscarred:
require 'date'
class MyDate < Date
def initialize(year, month, day)
@original_month = month
@original_day = day
# Christmas comes early!
super(year, 12, 25)
end
end
और सबसे उम्मीद ढंग से इसका इस्तेमाल करने के लिए आगे बढ़ें ...
require 'my_date'
mdt = MyDate.new(2012, 1, 28)
puts mdt.to_s
... केवल डबल-पार तथ्य से हो सकता है, कि दिनांक :: नई विधि वास्तव में आज तक किसी अन्य नाम :: नागरिक है, जो कभी नहीं कॉल इनिशियलाइज़ करता है। इस मामले में, "2012-12-25" अपेक्षित के बजाय कोड का अंतिम भाग "2012-01-28" प्रिंट करता है।
प्रिय रूबी-समुदाय, wtf यह है?
वहाँ नई aliasing के लिए कुछ बहुत अच्छे कारण है, इतना है कि यह ध्यान नहीं देता प्रारंभ, और एक परिणाम के रूप में, किसी भी सामान्य ज्ञान और ग्राहक के प्रोग्रामर के मानसिक स्वास्थ्य के लिए संबंध?
करके जिसका "अच्छा" की परिभाषा? –
विकल्प क्या है? यदि आप प्रारंभिक से नागरिक को कॉल करते हैं, तो आपने उस ऑब्जेक्ट को आवंटित किया है जिसकी आपको आवश्यकता नहीं है। – pguardiario
ठीक है, यह एक ही विधि में ऑब्जेक्ट आवंटित करने और आरंभ करने के लिए अर्थात् गलत रूप से गलत लगता है। मेरा मतलब है, अगर 'नागरिक' वास्तविक रूप से 'नया' है, तो अंत में इसे 'प्रारंभिक' क्यों न करें? यह 'तिथि' में शुद्ध औपचारिकता हो सकती है, लेकिन यह वास्तव में इसके कार्यान्वयन विवरणों के माध्यम से खोदने की आवश्यकता के बिना कक्षा का विस्तार करने की अनुमति देगी। इसलिए, मैंने सोचा, क्यों 'नागरिक' को 'नया' करने का निर्णय लिया जा सकता था? – jst