Project

General

Profile

Actions

Feature #4468

closed

String() should call to_str before to_s

Added by nagachika (Tomoyuki Chikanaga) over 13 years ago. Updated over 13 years ago.

Status:
Closed
Target version:
[ruby-dev:43306]

Description

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

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

Updated by nagachika (Tomoyuki Chikanaga) over 13 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

Updated by naruse (Yui NARUSE) over 13 years ago

  • Status changed from Open to Assigned
  • Assignee set to matz (Yukihiro Matsumoto)

=begin

=end

Updated by matz (Yukihiro Matsumoto) over 13 years ago

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

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

In message "Re: [ruby-dev:43306] [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 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

Updated by matz (Yukihiro Matsumoto) over 13 years ago

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

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

In message "Re: [ruby-dev:43306] [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 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

Updated by nagachika (Tomoyuki Chikanaga) over 13 years ago

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

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

Updated by nagachika (Tomoyuki Chikanaga) over 13 years ago

  • Status changed from Assigned to Closed

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

Actions

Also available in: Atom PDF

Like0
Like0Like0Like0Like0Like0Like0