From: Tomoyuki Chikanaga Date: 2011-03-05T22:05:02+09:00 Subject: [ruby-dev:43307] [Ruby 1.9 - Feature #4468] String() should call to_str before to_s Issue #4468 has been updated by Tomoyuki Chikanaga. パッチを貼り忘れていました。このようになるかと思います。 diff --git a/object.c b/object.c index b25c0af..fad726c 100644 --- a/object.c +++ b/object.c @@ -2360,7 +2360,10 @@ rb_num2dbl(VALUE val) VALUE rb_String(VALUE val) { - return rb_convert_type(val, T_STRING, "String", "to_s"); + VALUE tmp = rb_check_string_type(val); + if (NIL_P(tmp)) + tmp = rb_convert_type(val, T_STRING, "String", "to_s"); + return tmp; } ---------------------------------------- Feature #4468: String() should call to_str before to_s http://redmine.ruby-lang.org/issues/4468 Author: Tomoyuki Chikanaga Status: Open Priority: Normal Assignee: Category: core Target version: 1.9.3 Integer() と Array() というカーネルメソッドはまず to_int/to_ary という 「暗黙の変換」のためのメソッドを呼び、それが失敗すると to_i/to_a を 呼んで変換するという仕様になっています。 しかし String() は最初から to_s を呼ぶようになっています。 統一感という意味ではまず to_str -> to_s の順に呼ぶことにしたほうが 良いのではないでしょうか。 to_str と to_s が異なる文字列を返すようなケースは思い浮ばないので、 実際にこれで結果が変化することはないのではないかと推測します。 -- http://redmine.ruby-lang.org