From: Minero Aoki Date: 2000-03-15T22:22:22+09:00 Subject: [ruby-dev:9443] dup & Array#join あおきです。 以下のようなコードを実行すると、 class A def initialize @to_s = 'string' end attr :to_s end a = A.new p [a, ' and ', 'b'].join(' ') a の @to_s が 'string and b' に変化します。理由は、Array#join が 最初の要素の to_s をそのまま結果のバッファとして使っているからでした。 以下のような修正でどうでしょうか。 ------------------------------------------------------------------- あおきみねろう --- org.array.c Wed Mar 15 21:23:26 2000 +++ array.c Wed Mar 15 21:25:04 2000 @@ -704,7 +704,7 @@ } break; default: - result = rb_obj_as_string(tmp); + result = rb_str_dup(rb_obj_as_string(tmp)); break; } Wed Mar 15 21:25:04 2000 Minero Aoki * array.c (rb_ary_join): 'result' is always duplicated before concat string.