Это основано на ответе @ Фаррела, но без загрязнения пространства имен метода бесполезным old_xyz
методом. Кроме того, почему бы не использовать параметры по умолчанию напрямую?
class BigDecimal
old_to_s = instance_method :to_s
define_method :to_s do |param='F'|
old_to_s.bind(self).(param)
end
end
В Ruby 1.8 это выглядит немного ужаснее:
class BigDecimal
old_to_s = instance_method :to_s
define_method :to_s do |param|
old_to_s.bind(self).call(param || 'F')
end
end
Или, если вам не нравится предупреждение, которое вы получаете с кодом выше:
class BigDecimal
old_to_s = instance_method :to_s
define_method :to_s do |*param|
old_to_s.bind(self).call(param.first || 'F')
end
end