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

記事の一覧 >

関連するかもエントリー

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したクラスで、自分で定義した便利なメ...
Ruby on Rails が簡単というのはウソ
Ruby on Rails が簡単というのはウソ綺麗に手順を踏んでやる場合には Ruby 初心者は躓くところが多い && 最初の学習コスト高いというのは納得。なおWebエンジニアの場合、こんな感じなのかな。たぶん。Windows だといろいろうまくいかないので Mac 買う or...
Ruby on Rails が簡単というのはウソ綺麗に手順を踏んでやる場合には Ruby 初心者は躓くところが多い && 最初の学習コスト高...