From: "kou (Kouhei Sutou)" Date: 2013-07-07T11:53:08+09:00 Subject: [ruby-dev:47487] [ruby-trunk - Bug #8602] REXML::Element#add_text and REXML::Text#<< Issue #8602 has been updated by kou (Kouhei Sutou). Assignee set to kou (Kouhei Sutou) Text#<<のドキュメントを読むと、rawモードのときだけサポートしているようにみえました。 rawモードだと@normalize/@unnormalizeを使わないので、ここでこれらをクリアーしていないのは意図的だったのだろうと思います。 ただ、キャッシュをクリアーすることによりrawモードでもrawモードでなくても動くようになるので、キャッシュをクリアーすることにしました! 報告ありがとうございました! ---------------------------------------- Bug #8602: REXML::Element#add_text and REXML::Text#<< https://bugs.ruby-lang.org/issues/8602#change-40336 Author: ohai (Ippei Obayashi) Status: Closed Priority: Normal Assignee: kou (Kouhei Sutou) Category: lib Target version: ruby -v: ruby 2.1.0dev (2013-07-04 trunk 41732) [x86_64-linux] Backport: 1.9.3: UNKNOWN, 2.0.0: UNKNOWN 以下のコードは "foo bar" が出力されることが期待されますが実際には "foo" が出力されます。 require 'rexml/document' doc = REXML::Document.new("") doc.root.add_text("foo") doc.to_s doc.root.add_text(" bar") p doc.root.to_s doc.to_s の部分をコメントアウトすると挙動が変わり "foo bar" が出力されます。 REXML::Element#add_text が呼び出している REXML::Text#<< が内部状態(@string)を変化させているにもかかわらず キャッシュ(@normalized, @unnormalized)をクリアしていないのが原因だと思われます。 添付したパッチで修正されると思います。 -- http://bugs.ruby-lang.org/