From: "ohai (Ippei Obayashi)" Date: 2013-07-05T03:36:11+09:00 Subject: [ruby-dev:47482] [ruby-trunk - Bug #8602][Open] REXML::Element#add_text and REXML::Text#<< Issue #8602 has been reported by ohai (Ippei Obayashi). ---------------------------------------- Bug #8602: REXML::Element#add_text and REXML::Text#<< https://bugs.ruby-lang.org/issues/8602 Author: ohai (Ippei Obayashi) Status: Open Priority: Normal Assignee: 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/