मुझे मायरोन का जवाब पसंद है लेकिन यह "मैं अब जावा / सी # का उपयोग नहीं करता हूं, इसलिए मैं रूबी रोग से पीड़ित हूं, इसलिए मैं फिर से विरासत का उपयोग नहीं करने जा रहा हूं" । किसी भी वर्ग को खोलना खतरे से भरा हो सकता है और इसे संयम से इस्तेमाल किया जाना चाहिए, खासकर जब यह रूबी की मुख्य लाइब्रेरी का हिस्सा हो। मैं यह नहीं कह रहा हूं कि इसका कभी उपयोग न करें, लेकिन आमतौर पर इससे बचना आसान है और बेहतर विकल्प उपलब्ध हैं, जैसे
class IntegerInString < String
def initialize( s )
fail ArgumentError, "The string '#{s}' is not an integer in a string, it's just a string." unless s =~ /^\-?[0-9]+$/
super
end
end
फिर जब आप एक स्ट्रिंग का उपयोग करना चाहते हैं जो एक संख्या हो सकती है यह स्पष्ट है कि आप क्या कर रहे हैं और आप किसी भी कोर क्लास को क्लोब नहीं करते हैं, जैसे;
n = IntegerInString.new "2"
n.to_i
# => 2
IntegerInString.new "blob"
ArgumentError: The string 'blob' is not an integer in a string, it's just a string.
आप इनिशियलाइज़ में सभी प्रकार के चेक जोड़ सकते हैं, जैसे कि बाइनरी नंबर आदि के लिए जाँच। मुख्य बात यह है कि रूबी लोगों के लिए है और लोगों के लिए होने का मतलब स्पष्टता है । किसी वस्तु को उसके परिवर्तनशील नाम और उसके वर्ग नाम के माध्यम से नाम देने से चीजें बहुत स्पष्ट हो जाती हैं।
^
और सबसे अलग regexp जायके की तुलना में मेटाचार्स के रूप में$
अलग-अलग अर्थ है। आप शायद उपयोग करने के लिए\A
और\Z
इसके बजाय मतलब है ।