Feature #4468

String() should call to_str before to_s

Added by Tomoyuki Chikanaga about 4 years ago. Updated about 4 years ago.

[ruby-dev:43306]
Status:Closed
Priority:Normal
Assignee:Yukihiro Matsumoto

Description

=begin
Integer() と Array() というカーネルメソッドはまず to_int/to_ary という
「暗黙の変換」のためのメソッドを呼び、それが失敗すると to_i/to_a を
呼んで変換するという仕様になっています。

しかし String() は最初から to_s を呼ぶようになっています。
統一感という意味ではまず to_str -> to_s の順に呼ぶことにしたほうが
良いのではないでしょうか。
to_str と to_s が異なる文字列を返すようなケースは思い浮ばないので、
実際にこれで結果が変化することはないのではないかと推測します。
=end

History

#1 Updated by Tomoyuki Chikanaga about 4 years ago

=begin
パッチを貼り忘れていました。このようになるかと思います。

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;
}

=end

#2 Updated by Yui NARUSE about 4 years ago

  • Status changed from Open to Assigned
  • Assignee set to Yukihiro Matsumoto

=begin

=end

#3 Updated by Yukihiro Matsumoto about 4 years ago

=begin
まつもと ゆきひろです

まあここだけ違っているメリットもさほどないようですから、変更
しても良いのではないでしょうか。

In message "Re: [Ruby 1.9 - Feature #4468][Open] String() should call to_str before to_s"
on Sat, 5 Mar 2011 21:43:18 +0900, Tomoyuki Chikanaga nagachika00@gmail.com writes:
|
|
|Issue #4468 has been reported by Tomoyuki Chikanaga.
|
|----------------------------------------
|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
=end

#4 Updated by Yukihiro Matsumoto about 4 years ago

=begin
まつもと ゆきひろです

まあここだけ違っているメリットもさほどないようですから、変更
しても良いのではないでしょうか。

In message "Re: [Ruby 1.9 - Feature #4468][Open] String() should call to_str before to_s"
on Sat, 5 Mar 2011 21:43:18 +0900, Tomoyuki Chikanaga nagachika00@gmail.com writes:
|
|
|Issue #4468 has been reported by Tomoyuki Chikanaga.
|
|----------------------------------------
|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
=end

#5 Updated by Tomoyuki Chikanaga about 4 years ago

=begin
お返事ありがとうございます。

では変更してしまおうと思います。
=end

#6 Updated by Tomoyuki Chikanaga about 4 years ago

  • Status changed from Assigned to Closed

=begin
r31209 で変更しました。
=end

Also available in: Atom PDF