সম্প্রতি আমি এর চারপাশে একটি উপায় খুঁজে পেয়েছি। অ্যারেতে উপাদান রাখতে বা বাতিল করতে আমি optionচ্ছিক প্যারামিটার দিয়ে অ্যারে শ্রেণিতে একটি পদ্ধতি তৈরি করতে চেয়েছিলাম।
আমি যেভাবে এটি সিমুলেট করেছিলাম তা হ'ল প্যারামিটার হিসাবে একটি অ্যারে পাস করে, এবং তারপরে সেই সূচকের মান শূন্য ছিল কি না তা পরীক্ষা করে।
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
scope
সত্য এবং আপনি মধ্যে পাসfalse
,scope ||= true
কাজ হবে না। এটি একই হিসাবে মূল্যায়ন করেnil
এবং এটিতে সেট করবেtrue