これは@Farrelの回答に基づいていますが、メソッドの名前空間を役に立たない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