हाल ही में मुझे इस के आसपास एक रास्ता मिला। मैं सरणी में तत्वों को रखने या त्यागने के लिए, वैकल्पिक पैरामीटर के साथ सरणी वर्ग में एक विधि बनाना चाहता था।
जिस तरह से मैंने इसे अनुकरण किया था, पैरामीटर के रूप में एक सरणी पास करके, और तब जांच कर रहा था कि उस सूचकांक का मान शून्य था या नहीं।
class Array
def ascii_to_text(params)
param_len = params.length
if param_len > 3 or param_len < 2 then raise "Invalid number of arguments #{param_len} for 2 || 3." end
bottom = params[0]
top = params[1]
keep = params[2]
if keep.nil? == false
if keep == 1
self.map{|x| if x >= bottom and x <= top then x = x.chr else x = x.to_s end}
else
raise "Invalid option #{keep} at argument position 3 in #{p params}, must be 1 or nil"
end
else
self.map{|x| if x >= bottom and x <= top then x = x.chr end}.compact
end
end
end
विभिन्न मापदंडों के साथ हमारी कक्षा विधि बाहर की कोशिश कर रहा:
array = [1, 2, 97, 98, 99]
p array.ascii_to_text([32, 126, 1]) # Convert all ASCII values of 32-126 to their chr value otherwise keep it the same (That's what the optional 1 is for)
उत्पादन: ["1", "2", "a", "b", "c"]
ठीक है, शांत योजना के अनुसार काम करता है। आइए जांच लें और देखें कि क्या होता है यदि हम सरणी में तीसरे पैरामीटर विकल्प (1) में पास नहीं करते हैं।
array = [1, 2, 97, 98, 99]
p array.ascii_to_text([32, 126]) # Convert all ASCII values of 32-126 to their chr value else remove it (1 isn't a parameter option)
उत्पादन: ["a", "b", "c"]
आप देख सकते हैं, सरणी में तीसरा विकल्प हटा दिया गया है, इस प्रकार विधि में एक अलग अनुभाग को शुरू करने तथा सभी ASCII मूल्यों है कि हमारे रेंज में नहीं हैं को हटाने (32 -126)
वैकल्पिक रूप से, हम पैरामीटर में शून्य के रूप में मूल्य जारी कर सकते थे। कौन सा निम्नलिखित कोड ब्लॉक के लिए इसी तरह दिखेगा:
def ascii_to_text(top, bottom, keep = nil)
if keep.nil?
self.map{|x| if x >= bottom and x <= top then x = x.chr end}.compact
else
self.map{|x| if x >= bottom and x <= top then x = x.chr else x = x.to_s end}
end
इस विधि के साथ थोड़ा गचाचा: उदा। यदि आप 'स्कोप' के लिए डिफ़ॉल्ट मान बनाने की कोशिश कर रहे हैं और आप 'झूठी' में गुजरते हैं, तो 'स्कोप || = true' काम नहीं करेगा। यह 'nil' के समान मूल्यांकन करता है और इसे 'सत्य' –
पर सेट करेगा, क्या यह उत्तर के 3 साल बाद रूबी के वर्तमान संस्करण के साथ संभव है? – dalloliogm
@ जोशपिनटर, अच्छा स्पष्टीकरण। मूल रूप से || = एक = बी या सी नहीं है, मैं 'xyz || = true' देखकर cringed। यह कह रहा है कि यह शून्य है, यह हमेशा सच है। यदि यह सच है, तो यह सच है। –