[Ruby 1.9 - Feature #4468][Open] String() should call to_str before to_s

Issue #4468 has been reported by Tomoyuki C…


Feature #4468: String() should call to_str before to_s
http://redmine.ruby-lang.org/issues/4468

Author: Tomoyuki C.
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 が異なる文字列を返すようなケースは思い浮ばないので、
実際にこれで結果が変化することはないのではないかと推測します。

Issue #4468 has been updated by Tomoyuki C…

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

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 C.
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 が異なる文字列を返すようなケースは思い浮ばないので、
実際にこれで結果が変化することはないのではないかと推測します。

Issue #4468 has been updated by Yui NARUSE.

Status changed from Open to Assigned
Assignee set to Yukihiro M.


Feature #4468: String() should call to_str before to_s
http://redmine.ruby-lang.org/issues/4468

Author: Tomoyuki C.
Status: Assigned
Priority: Normal
Assignee: Yukihiro M.
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 が異なる文字列を返すようなケースは思い浮ばないので、
実際にこれで結果が変化することはないのではないかと推測します。

$B$^$D$b$H(B $B$f$-$R$m$G$9(B

$B$^$"[email protected]$10c$C$F$$$k%a%j%C%H$b$5$[$I$J$$$h$&$G$9$+$i!"JQ99(B
$B$7$F$bNI$$$N$G$O$J$$$G$7$g$&$+!#(B

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 C.
[email protected] writes:
|
|
|Issue #4468 has been reported by Tomoyuki C…

Feature #4468: String() should call to_str before to_s
http://redmine.ruby-lang.org/issues/4468
Author: Tomoyuki C.
Status: Open
Priority: Normal
Assignee:
Category: core
Target version: 1.9.3
Integer() $B$H(B Array() $B$H$$$&%+!<%M%k%a%=%C%I$O$^$:(B to_int/to_ary

$B$H$$$&(B
|$B!V0EL[$NJQ49!W$N$?$a$N%a%=%C%I$r8F$S!"$=$l$,<:GT$9$k$H(B to_i/to_a $B$r(B
|$B8F$s$GJQ49$9$k$H$$$&;EMM$K$J$C$F$$$^$9!#(B
|
|$B$7$+$7(B String() $B$O:G=i$+$i(B to_s $B$r8F$V$h$&$K$J$C$F$$$^$9!#(B
|$BE}0l46$H$$$&0UL#$G$O$^$:(B to_str -> to_s $B$N=g$K8F$V$3$H$K$7$?$[$&$,(B
|$BNI$$$N$G$O$J$$$G$7$g$&$+!#(B
|to_str $B$H(B to_s $B$,0[$J$kJ8;zNs$rJV$9$h$&$J%1!<%9$O;W$$Ib$P$J$$$N$G!"(B
|$B<B:]$K$3$l$G7k2L$,JQ2=$9$k$3$H$O$J$$$N$G$O$J$$$+$H?dB,$7$^$9!#(B

Issue #4468 has been updated by Tomoyuki C…

Status changed from Assigned to Closed

r31209 で変更しました。

Feature #4468: String() should call to_str before to_s
http://redmine.ruby-lang.org/issues/4468

Author: Tomoyuki C.
Status: Closed
Priority: Normal
Assignee: Yukihiro M.
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 が異なる文字列を返すようなケースは思い浮ばないので、
実際にこれで結果が変化することはないのではないかと推測します。

Issue #4468 has been updated by Tomoyuki C…

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

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

Feature #4468: String() should call to_str before to_s
http://redmine.ruby-lang.org/issues/4468

Author: Tomoyuki C.
Status: Assigned
Priority: Normal
Assignee: Yukihiro M.
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 が異なる文字列を返すようなケースは思い浮ばないので、
実際にこれで結果が変化することはないのではないかと推測します。

This forum is not affiliated to the Ruby language, Ruby on Rails framework, nor any Ruby applications discussed here.

| Privacy Policy | Terms of Service | Remote Ruby Jobs