मैं अक्सर करने के लिए मनमाने ढंग से डेटा प्रकार परिवर्तित करने के साथ यह आसान निपटने के लिए बनाने के लिए रूबी के मूल व्यवहार का विस्तार करने के इस पैटर्न का उपयोग किया है
: बूलियन मूल्यों, जो यह वास्तव में अलग-अलग URL पैरामीटर के साथ सौदा करने के लिए आसान बनाता है, आदि
class String
def to_boolean
ActiveRecord::Type::Boolean.new.cast(self)
end
end
class NilClass
def to_boolean
false
end
end
class TrueClass
def to_boolean
true
end
def to_i
1
end
end
class FalseClass
def to_boolean
false
end
def to_i
0
end
end
class Integer
def to_boolean
to_s.to_boolean
end
end
तो मान लीजिए कि आप एक पैरामीटर foo
जो किया जा सकता है चलो 0
- एक पूर्णांक (0 गलत है, अन्य सभी सत्य हैं)
- एक सच्चे बूलियन (सही/गलत)
- एक स्ट्रिंग ("सही", "गलत", "0", "1", " सही "," गलत ")
- शून्य
इसके बजाय सशर्त, का एक समूह का उपयोग कर के, तो आप सिर्फ foo.to_boolean
कॉल कर सकते हैं और यह आपके लिए जादू के बाकी करेंगे।
रेल में, मैं इसे लगभग सभी परियोजनाओं में core_ext.rb
नामक प्रारंभकर्ता में जोड़ता हूं क्योंकि यह पैटर्न इतना आम है।
## EXAMPLES
nil.to_boolean == false
true.to_boolean == true
false.to_boolean == false
0.to_boolean == false
1.to_boolean == true
99.to_boolean == true
"true".to_boolean == true
"foo".to_boolean == true
"false".to_boolean == false
"TRUE".to_boolean == true
"FALSE".to_boolean == false
"0".to_boolean == false
"1".to_boolean == true
true.to_i == 1
false.to_i == 0
स्रोत
2017-09-25 20:26:41
क्या परिणाम * दो मानों में से एक होना चाहिए 'सत्य' या 'झूठा' या परिणाम पर्याप्त है या गलत है? यदि उत्तरार्द्ध, तो 'झूठा' पहले से ही झूठा है, और दोनों 'सत्य' और 'सत्य' सत्य हैं, इसलिए एकमात्र मूल्य जिसके लिए नतीजा पहले से सही नहीं है, '' false 'है: 'if input = = 'झूठा' तो सत्य और इनपुट अंत 'इसे करना चाहिए। –
यह एक महान टिप्पणी जोर्ग है, हालांकि मैं मानता हूं कि कुछ अनुप्रयोगों के लिए बूलियन मान सही या गलत होना आवश्यक है और केवल एक मूल्य जो सत्य या गलत नहीं है। – emery
एमरी, यदि आपको एक बुलियन लौटने की ज़रूरत है तो आप दो "नोट्स" के साथ @ जोर्ग की अभिव्यक्ति को पूर्ववत कर सकते हैं: '!! (अगर इनपुट == 'झूठी' तो सत्य और इनपुट अंत)। दूसरा '! 'वापसी मूल्य को एक बूलियन में बदल देता है जो आप चाहते हैं के विपरीत है; पहला '!' तो सुधार करता है। यह "चाल" काफी समय से रहा है। हर कोई इसके शौकीन नहीं है। –