A Day in the Life

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を継承したクラス) な文字列で問題が発生している。

関連するかもエントリー

Ruby 1.8.7 の正規表現の最大文字数は約64500文字
Ruby 1.8.7 の正規表現の最大文字数は約64500文字線形で大きくなる正規表現がいつの間にか "regular expression too big" で死んで困った。こんな RegexpError エラーあるんだね。Ruby レベルの定数等での制限でなく、c レベルの話...
Ruby 1.8.7 の正規表現の最大文字数は約64500文字線形で大きくなる正規表現がいつの間にか "regular expression...
Rails3 での自動文字列エスケープの挙動
Rails3 での自動文字列エスケープの挙動興味があったのでちょっと実装のぞいてみた。Rails3 では、テンプレートで標準で文字列をHTMLエスケープするようになってる。 #=> エスケープされるこれを自動エスケープをやめるには #=> エスケープされないとなるんだけど、たとえ...
Rails3 での自動文字列エスケープの挙動興味があったのでちょっと実装のぞいてみた。Rails3 では、テンプレートで標準で文字列をHTM...
2011-06-15
Ruby で Array を継承したクラスをうまくあつかうRuby で Array を継承/Mix-inしたクラスで、自分で定義した便利なメソッドを利用したい時ってありますよね。そんなとき普通にclass MyArray < Array def odd select ...
Ruby で Array を継承したクラスをうまくあつかうRuby で Array を継承/Mix-inしたクラスで、自分で定義した便利なメ...