String を継承したクラスでのブロック内部の正規表現後方参照の挙動
String を継承したクラスでのブロック内部の正規表現後方参照の挙動
class MyString < String
def gsub(*args, &block)
super
end
end
puts String.new('123').gsub(/(\d)/) { $1 } #=> 123
puts MyString.new('123').gsub(/(\d)/) { $1 } #=> 333
えっ…。ruby 1.8.7 p334 と ruby 1.9.2 p180 で確認。Ruby コードレベルでどうにか解消できるのかなぁ。
Rails 2.3 でも Rails 3.0 でも ActiveSupport::SafeBuffer(Stringを継承したクラス) な文字列で問題が発生している。