[前][次][番号順一覧][スレッド一覧]

ruby-reference-manual:2823

From: Nobuhiro IMAI <nov@y...>
Date: Tue, 13 Sep 2011 21:52:03 +0900
Subject: [ruby-reference-manual:2823] [るりまプロジェクト - Bug #5316] Array#join は to_s ではなく to_str が使用される


Issue #5316 has been updated by Nobuhiro IMAI.

Category set to doc
Assignee set to Nobuhiro IMAI

=begin
to_str があれば to_str、なければ to_s が呼ばれるようですね。
1.9.2 以降のようですが、以下のようなパッチでどうでしょうか?

 diff --git a/refm/api/src/_builtin/Array b/refm/api/src/_builtin/Array
 index f434365..6ff5cb5 100644
 --- a/refm/api/src/_builtin/Array
 +++ b/refm/api/src/_builtin/Array
 @@ -981,7 +981,11 @@ lv 
  
  配列の要素を文字列 sep を間に挟んで連結した文字列を返します。
  
 +#@since 1.9.2
 +文字列でない要素に対しては、to_str があれば to_str、なければ to_s した結果を連結します。
 +#@else
  文字列でない要素に対しては to_s した結果を連結します。
 +#@end
  要素がまた配列であれば再帰的に (同じ sep を利用して)
  join した文字列を連結します。
  ただし、配列要素が自身を含むような無限にネストした配列に対しては、以下
=end

----------------------------------------
Bug #5316: Array#join は to_s ではなく to_str が使用される
http://redmine.ruby-lang.org/issues/5316

Author: Masahiro Tomita
Status: Open
Priority: Normal
Assignee: Nobuhiro IMAI
Category: doc
Target version: 
reporter: 
ruby_version: 1.9.2p290


Array#join の説明に「文字列でない要素に対しては to_s した結果を連結します」とありますが、実際には to_s ではなく to_str が使用されるようです。

    % ruby -v -e 'o=Object.new; def o.to_s; "s"; end; def o.to_str; "str"; end; p [o].join'
    ruby 1.9.2p290 (2011-07-09) [i686-linux]
    "str"

ちなみに 1.8.7 では to_s が使用されてました。


-- 
http://redmine.ruby-lang.org

--
ML: ruby-reference-manual@m...
Info: http://QuickML.com/

[前][次][番号順一覧][スレッド一覧]

      2822 2011-09-13 14:13 [tommy@t...          ] [るりまプロジェクト - Bug #5316][Open] Array#join は to_s ではなく to_str が使用される
->    2823 2011-09-13 14:52 ┣[nov@y...            ] [るりまプロジェクト - Bug #5316] Array#join は to_s ではなく to_str が使用される
      2824 2011-09-13 15:42 ┗[tommy@t...          ] [るりまプロジェクト - Bug #5316] Array#join は to_s ではなく to_str が使用される