Baru-baru ini saya menemukan jalan keluarnya. Saya ingin membuat metode di kelas array dengan parameter opsional, untuk menyimpan atau membuang elemen dalam array.
Cara saya mensimulasikan ini adalah dengan melewatkan array sebagai parameter, dan kemudian memeriksa apakah nilai pada indeks itu nihil atau tidak.
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
Mencoba metode kelas kami dengan parameter berbeda:
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)
keluaran: ["1", "2", "a", "b", "c"]
Oke, keren itu berfungsi sesuai rencana. Sekarang mari kita periksa dan lihat apa yang terjadi jika kita tidak meneruskan opsi parameter ketiga (1) dalam array.
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)
keluaran: ["a", "b", "c"]
Seperti yang Anda lihat, opsi ketiga dalam larik telah dihapus, sehingga memulai bagian yang berbeda dalam metode dan menghapus semua nilai ASCII yang tidak berada dalam jangkauan kami (32-126)
Alternatifnya, kita bisa mengeluarkan nilai nihil dalam parameter. Yang akan terlihat mirip dengan blok kode berikut:
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
benar dan Anda meneruskanfalse
,scope ||= true
tidak akan berfungsi. Ini mengevaluasi samanil
dan akan mengaturnya ketrue