Feature #4468

String() should call to_str before to_s

Added by Tomoyuki Chikanaga about 3 years ago. Updated almost 3 years ago.

[ruby-dev:43306]
Status:Closed
Priority:Normal
Assignee:Yukihiro Matsumoto
Category:core
Target version:1.9.3

Description

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

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

History

#1 Updated by Tomoyuki Chikanaga about 3 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 @@ rbnum2dbl(VALUE val)
VALUE
rb
String(VALUE val)
{
- return rbconverttype(val, TSTRING, "String", "tos");
+ VALUE tmp = rbcheckstringtype(val);
+ if (NIL
P(tmp))
+ tmp = rbconverttype(val, TSTRING, "String", "tos");
+ return tmp;
}

=end

#2 Updated by Yui NARUSE about 3 years ago

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

=begin

=end

#3 Updated by Yukihiro Matsumoto about 3 years ago

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

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

In message "Re: [Ruby 1.9 - Feature #4468][Open] String() should call tostr before tos"
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 tostr before tos
|http://redmine.ruby-lang.org/issues/4468
|
|Author: Tomoyuki Chikanaga
|Status: Open
|Priority: Normal
|Assignee:
|Category: core
|Target version: 1.9.3
|
|
|Integer() と Array() というカーネルメソッドはまず toint/toary という
|「暗黙の変換」のためのメソッドを呼び、それが失敗すると toi/toa を
|呼んで変換するという仕様になっています。
|
|しかし String() は最初から tos を呼ぶようになっています。
|統一感という意味ではまず to
str -> tos の順に呼ぶことにしたほうが
|良いのではないでしょうか。
|to
str と to_s が異なる文字列を返すようなケースは思い浮ばないので、
|実際にこれで結果が変化することはないのではないかと推測します。
|
|--
|http://redmine.ruby-lang.org
=end

#4 Updated by Yukihiro Matsumoto about 3 years ago

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

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

In message "Re: [Ruby 1.9 - Feature #4468][Open] String() should call tostr before tos"
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 tostr before tos
|http://redmine.ruby-lang.org/issues/4468
|
|Author: Tomoyuki Chikanaga
|Status: Open
|Priority: Normal
|Assignee:
|Category: core
|Target version: 1.9.3
|
|
|Integer() と Array() というカーネルメソッドはまず toint/toary という
|「暗黙の変換」のためのメソッドを呼び、それが失敗すると toi/toa を
|呼んで変換するという仕様になっています。
|
|しかし String() は最初から tos を呼ぶようになっています。
|統一感という意味ではまず to
str -> tos の順に呼ぶことにしたほうが
|良いのではないでしょうか。
|to
str と to_s が異なる文字列を返すようなケースは思い浮ばないので、
|実際にこれで結果が変化することはないのではないかと推測します。
|
|--
|http://redmine.ruby-lang.org
=end

#5 Updated by Tomoyuki Chikanaga about 3 years ago

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

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

#6 Updated by Tomoyuki Chikanaga about 3 years ago

  • Status changed from Assigned to Closed

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

Also available in: Atom PDF