Forum: Ruby-dev [ruby-trunk - Bug #7625][Open] Arrayを継承したオブジェクトのcompactがArrayを返す

Posted by mogya@mogya.com (Daisuke Furukawa) (Guest)
on 2012-12-26 12:11
(Received via mailing list)
Issue #7625 has been reported by mogya@mogya.com (Daisuke Furukawa).

----------------------------------------
Bug #7625: Arrayを継承したオブジェクトのcompactがArrayを返す
https://bugs.ruby-lang.org/issues/7625

Author: mogya@mogya.com (Daisuke Furukawa)
Status: Open
Priority: Normal
Assignee:
Category:
Target version:
ruby -v: ruby 1.9.3p362 (2012-12-25 revision 38607) [x86_64-linux]


現象:
 ruby 1.9.3で、Arrayを継承したクラスのcompactメソッドを呼び出したとき、
Arrayクラスのオブジェクトが帰ってくる

期待している結果
  継承したクラスのオブジェクトが帰ってくる

再現コード
========
$ ruby -v
ruby 1.9.2p320 (2012-04-20 revision 35421) [i686-linux]
$ irb
irb(main):001:0> class Array2 < Array; end
irb(main):002:0> p Array2.new().compact.class.name
"Array2"
========
$ ruby -v
ruby 1.9.3p362 (2012-12-25 revision 38607) [x86_64-linux]
$ irb
irb(main):001:0> class Array2 < Array; end
irb(main):002:0> p Array2.new().compact.class.name
"Array"
========

他に調べたこと

・ruby 1.9.3p327も、p362 と同じ挙動でした
・compactの代わりにuniqを使っても同様の問題が発生
・1.9.3でも、Stringクラスを使って
  s = String2.new().concat("") だとString2クラスのオブジェクトが帰ってきてます

see also: 
http://blade.nagaokaut.ac.jp/cgi-bin/scat.rb/ruby/...
Posted by shugo (Shugo Maeda) (Guest)
on 2012-12-26 16:16
(Received via mailing list)
Issue #7625 has been updated by shugo (Shugo Maeda).

Category changed from DOC to core


----------------------------------------
Bug #7625: Arrayを継承したオブジェクトのcompactがArrayを返す
https://bugs.ruby-lang.org/issues/7625#change-35098

Author: mogya@mogya.com (Daisuke Furukawa)
Status: Assigned
Priority: Normal
Assignee: matz (Yukihiro Matsumoto)
Category: core
Target version: 2.0.0
ruby -v: ruby 1.9.3p362 (2012-12-25 revision 38607) [x86_64-linux]


現象:
 ruby 1.9.3で、Arrayを継承したクラスのcompactメソッドを呼び出したとき、
Arrayクラスのオブジェクトが帰ってくる

期待している結果
  継承したクラスのオブジェクトが帰ってくる

再現コード
========
$ ruby -v
ruby 1.9.2p320 (2012-04-20 revision 35421) [i686-linux]
$ irb
irb(main):001:0> class Array2 < Array; end
irb(main):002:0> p Array2.new().compact.class.name
"Array2"
========
$ ruby -v
ruby 1.9.3p362 (2012-12-25 revision 38607) [x86_64-linux]
$ irb
irb(main):001:0> class Array2 < Array; end
irb(main):002:0> p Array2.new().compact.class.name
"Array"
========

他に調べたこと

・ruby 1.9.3p327も、p362 と同じ挙動でした
・compactの代わりにuniqを使っても同様の問題が発生
・1.9.3でも、Stringクラスを使って
  s = String2.new().concat("") だとString2クラスのオブジェクトが帰ってきてます

see also: 
http://blade.nagaokaut.ac.jp/cgi-bin/scat.rb/ruby/...
Posted by shugo (Shugo Maeda) (Guest)
on 2012-12-26 16:16
(Received via mailing list)
Issue #7625 has been updated by shugo (Shugo Maeda).

Category set to DOC
Status changed from Open to Assigned
Assignee set to matz (Yukihiro Matsumoto)
Target version set to 2.0.0

前田です。

mogya@mogya.com (Daisuke Furukawa) wrote:
> 現象:
>  ruby 1.9.3で、Arrayを継承したクラスのcompactメソッドを呼び出したとき、
> Arrayクラスのオブジェクトが帰ってくる

この変更自体は、r30148で導入された意図的な変更だと思います。

    * array.c (rb_ary_dup): should copy contents only.  no instance
      variable, no class would be copied.  it would affect methods
      #sort, #reject, #transpose, #uniq, #compact, and #shuffle.
      [ruby-core:33640]

ただ、まつもとさんが http://bugs.ruby-lang.org/issues/4136#note-7 でflattenなどは
サブクラスのインスタンスを返すという指摘に対し、

  If a method is originally defined in Enumerable, i.e. its return value 
(Array)
  is a collection of values from enumerable.
  (snip)
  I don't think so.  #flatten is not an enumerable method.  Please point
  out if we missed some other methods.

と言っているんですが、compact/uniq/transpose/shuffleもEnumerableでもともと定義されて
いないですよね。
このあたりの一貫性の無さを正当化するような理由はあるでしょうか? > まつもとさん

とくに理由がないのであれば、これらのメソッドはサブクラスのインスタンスを返すようにするか、flattenなども
Arrayを返すようにした方がよいのではないかと思います。

----------------------------------------
Bug #7625: Arrayを継承したオブジェクトのcompactがArrayを返す
https://bugs.ruby-lang.org/issues/7625#change-35097

Author: mogya@mogya.com (Daisuke Furukawa)
Status: Assigned
Priority: Normal
Assignee: matz (Yukihiro Matsumoto)
Category: DOC
Target version: 2.0.0
ruby -v: ruby 1.9.3p362 (2012-12-25 revision 38607) [x86_64-linux]


現象:
 ruby 1.9.3で、Arrayを継承したクラスのcompactメソッドを呼び出したとき、
Arrayクラスのオブジェクトが帰ってくる

期待している結果
  継承したクラスのオブジェクトが帰ってくる

再現コード
========
$ ruby -v
ruby 1.9.2p320 (2012-04-20 revision 35421) [i686-linux]
$ irb
irb(main):001:0> class Array2 < Array; end
irb(main):002:0> p Array2.new().compact.class.name
"Array2"
========
$ ruby -v
ruby 1.9.3p362 (2012-12-25 revision 38607) [x86_64-linux]
$ irb
irb(main):001:0> class Array2 < Array; end
irb(main):002:0> p Array2.new().compact.class.name
"Array"
========

他に調べたこと

・ruby 1.9.3p327も、p362 と同じ挙動でした
・compactの代わりにuniqを使っても同様の問題が発生
・1.9.3でも、Stringクラスを使って
  s = String2.new().concat("") だとString2クラスのオブジェクトが帰ってきてます

see also: 
http://blade.nagaokaut.ac.jp/cgi-bin/scat.rb/ruby/...
Posted by mrkn (Kenta Murata) (Guest)
on 2013-02-01 17:38
(Received via mailing list)
Issue #7625 has been updated by mrkn (Kenta Murata).


r39004 (#7768) で uniq は修正されたようですね。
----------------------------------------
Bug #7625: Arrayを継承したオブジェクトのcompactがArrayを返す
https://bugs.ruby-lang.org/issues/7625#change-35765

Author: mogya@mogya.com (Daisuke Furukawa)
Status: Assigned
Priority: Normal
Assignee: matz (Yukihiro Matsumoto)
Category: core
Target version: 2.0.0
ruby -v: ruby 1.9.3p362 (2012-12-25 revision 38607) [x86_64-linux]


現象:
 ruby 1.9.3で、Arrayを継承したクラスのcompactメソッドを呼び出したとき、
Arrayクラスのオブジェクトが帰ってくる

期待している結果
  継承したクラスのオブジェクトが帰ってくる

再現コード
========
$ ruby -v
ruby 1.9.2p320 (2012-04-20 revision 35421) [i686-linux]
$ irb
irb(main):001:0> class Array2 < Array; end
irb(main):002:0> p Array2.new().compact.class.name
"Array2"
========
$ ruby -v
ruby 1.9.3p362 (2012-12-25 revision 38607) [x86_64-linux]
$ irb
irb(main):001:0> class Array2 < Array; end
irb(main):002:0> p Array2.new().compact.class.name
"Array"
========

他に調べたこと

・ruby 1.9.3p327も、p362 と同じ挙動でした
・compactの代わりにuniqを使っても同様の問題が発生
・1.9.3でも、Stringクラスを使って
  s = String2.new().concat("") だとString2クラスのオブジェクトが帰ってきてます

see also: 
http://blade.nagaokaut.ac.jp/cgi-bin/scat.rb/ruby/...
Posted by matz (Yukihiro Matsumoto) (Guest)
on 2013-02-06 07:38
(Received via mailing list)
Issue #7625 has been updated by matz (Yukihiro Matsumoto).


Enumerableで定義されていないArray独自のメソッドはサブクラスを返したほうが良いと思います。
直すタイミングはいつがいいのかな。

Matz.

----------------------------------------
Bug #7625: Arrayを継承したオブジェクトのcompactがArrayを返す
https://bugs.ruby-lang.org/issues/7625#change-35887

Author: mogya@mogya.com (Daisuke Furukawa)
Status: Assigned
Priority: Normal
Assignee: matz (Yukihiro Matsumoto)
Category: core
Target version: 2.0.0
ruby -v: ruby 1.9.3p362 (2012-12-25 revision 38607) [x86_64-linux]


現象:
 ruby 1.9.3で、Arrayを継承したクラスのcompactメソッドを呼び出したとき、
Arrayクラスのオブジェクトが帰ってくる

期待している結果
  継承したクラスのオブジェクトが帰ってくる

再現コード
========
$ ruby -v
ruby 1.9.2p320 (2012-04-20 revision 35421) [i686-linux]
$ irb
irb(main):001:0> class Array2 < Array; end
irb(main):002:0> p Array2.new().compact.class.name
"Array2"
========
$ ruby -v
ruby 1.9.3p362 (2012-12-25 revision 38607) [x86_64-linux]
$ irb
irb(main):001:0> class Array2 < Array; end
irb(main):002:0> p Array2.new().compact.class.name
"Array"
========

他に調べたこと

・ruby 1.9.3p327も、p362 と同じ挙動でした
・compactの代わりにuniqを使っても同様の問題が発生
・1.9.3でも、Stringクラスを使って
  s = String2.new().concat("") だとString2クラスのオブジェクトが帰ってきてます

see also: 
http://blade.nagaokaut.ac.jp/cgi-bin/scat.rb/ruby/...
Posted by KOSAKI Motohiro (Guest)
on 2013-02-06 07:42
(Received via mailing list)
> 
Enumerable$B$GDj5A$5$l$F$$$J$$(BArray$BFH<+$N%a%=%C%I$O%5%V%/%i%9$rJV$7$?$[$&$,NI$$$H;W$$$^$9!#(B
> $BD>$9%?%$%_%s%0$O$$$D$,$$$$$N$+$J!#(B

$B$$$^$+$i(B2.0$B$K(Bspec$B%l%Y%k$NJQ99$,F~$k$N$OH?BP$7$^$9!#G0$N$?$a!#(B
Posted by usa (Usaku NAKAMURA) (Guest)
on 2013-02-07 14:08
(Received via mailing list)
Issue #7625 has been updated by usa (Usaku NAKAMURA).


結局のところ、1.9.3の挙動は仕様だったのでしょうか?
それとも実はミス?

それによって、trunkに既にcharliesomeが先走って入れちゃった変更を
revertすべきかどうかとか(した方がいいと私個人は強く思っていることを
表明しておきます>mameさん)、1.9.3で現状rubyspecが仕様と思って記述
してしまっているのを変更した上で1.9.3でもバグとして直すべきかどうか、
などといった判断に影響が出ます。

----------------------------------------
Bug #7625: Arrayを継承したオブジェクトのcompactがArrayを返す
https://bugs.ruby-lang.org/issues/7625#change-35980

Author: mogya@mogya.com (Daisuke Furukawa)
Status: Assigned
Priority: Normal
Assignee: matz (Yukihiro Matsumoto)
Category: core
Target version: 2.0.0
ruby -v: ruby 1.9.3p362 (2012-12-25 revision 38607) [x86_64-linux]


現象:
 ruby 1.9.3で、Arrayを継承したクラスのcompactメソッドを呼び出したとき、
Arrayクラスのオブジェクトが帰ってくる

期待している結果
  継承したクラスのオブジェクトが帰ってくる

再現コード
========
$ ruby -v
ruby 1.9.2p320 (2012-04-20 revision 35421) [i686-linux]
$ irb
irb(main):001:0> class Array2 < Array; end
irb(main):002:0> p Array2.new().compact.class.name
"Array2"
========
$ ruby -v
ruby 1.9.3p362 (2012-12-25 revision 38607) [x86_64-linux]
$ irb
irb(main):001:0> class Array2 < Array; end
irb(main):002:0> p Array2.new().compact.class.name
"Array"
========

他に調べたこと

・ruby 1.9.3p327も、p362 と同じ挙動でした
・compactの代わりにuniqを使っても同様の問題が発生
・1.9.3でも、Stringクラスを使って
  s = String2.new().concat("") だとString2クラスのオブジェクトが帰ってきてます

see also: 
http://blade.nagaokaut.ac.jp/cgi-bin/scat.rb/ruby/...
Posted by matz (Yukihiro Matsumoto) (Guest)
on 2013-02-07 15:06
(Received via mailing list)
Issue #7625 has been updated by matz (Yukihiro Matsumoto).


正直なところ、どうして1.9.3と2.0の挙動が異なってしまっているのか経緯を把握してないので適切な答えはできません。
ただ、ArrayにあってEnumerableにないメソッドはレシーバーのクラスを返したほうが良いと思います。

Matz.

----------------------------------------
Bug #7625: Arrayを継承したオブジェクトのcompactがArrayを返す
https://bugs.ruby-lang.org/issues/7625#change-35985

Author: mogya@mogya.com (Daisuke Furukawa)
Status: Assigned
Priority: Normal
Assignee: matz (Yukihiro Matsumoto)
Category: core
Target version: 2.0.0
ruby -v: ruby 1.9.3p362 (2012-12-25 revision 38607) [x86_64-linux]


現象:
 ruby 1.9.3で、Arrayを継承したクラスのcompactメソッドを呼び出したとき、
Arrayクラスのオブジェクトが帰ってくる

期待している結果
  継承したクラスのオブジェクトが帰ってくる

再現コード
========
$ ruby -v
ruby 1.9.2p320 (2012-04-20 revision 35421) [i686-linux]
$ irb
irb(main):001:0> class Array2 < Array; end
irb(main):002:0> p Array2.new().compact.class.name
"Array2"
========
$ ruby -v
ruby 1.9.3p362 (2012-12-25 revision 38607) [x86_64-linux]
$ irb
irb(main):001:0> class Array2 < Array; end
irb(main):002:0> p Array2.new().compact.class.name
"Array"
========

他に調べたこと

・ruby 1.9.3p327も、p362 と同じ挙動でした
・compactの代わりにuniqを使っても同様の問題が発生
・1.9.3でも、Stringクラスを使って
  s = String2.new().concat("") だとString2クラスのオブジェクトが帰ってきてます

see also: 
http://blade.nagaokaut.ac.jp/cgi-bin/scat.rb/ruby/...
Posted by U.Nakamura (Guest)
on 2013-02-07 15:12
(Received via mailing list)
$B$3$s$K$A$O!"$J$+$`$i(B($B$&(B)$B$G$9!#(B

In message "[ruby-dev:46940] [ruby-trunk - Bug #7625] 
Array$B$r7Q>5$7$?%*%V%8%'%/%H$N(Bcompact$B$,(BArray$B$rJV$9(B"
    on Feb.07,2013 23:06:05, <matz@ruby-lang.org> wrote:
> 
$B@5D>$J$H$3$m!"$I$&$7$F(B1.9.3$B$H(B2.0$B$N5sF0$,0[$J$C$F$7$^$C$F$$$k$N$+7P0^$rGD0.$7$F$J$$$N$GE,@Z$JEz$($O$G$-$^$;$s!#(B

1.9.3$B$H(B2.0.0$B$O$D$$@hF|$^$GF1$8$G$7$?!#(B
[Bug #7768] $B$r<u$1$F!"(Bcharliesome$B$,(B r39004 
$B$G(Btrunk$B$rJQ99$7$F(B
$B$7$^$C$?$N$G!"5sF0$K0c$$$,H/@8$7$F$$$^$9!#(B

$B%P%0$J$iD>$9$N$b$d$`$J$7$H;W$$$^$9$,!"(B1.9.3$B$G$O;EMM$@$C$?(B($B$H(B
$B$3$l$^$GM}2r$5$l$F$-$?(B)$B$N$G!"$3$N%?%$%_%s%0$G(B2.0.0$B$N5sF0$,JQ(B
$B$o$C$F$7$^$C$?$3$H$,LdBj$K$J$C$F$$$^$9!#(B


> 
$B$?$@!"(BArray$B$K$"$C$F(BEnumerable$B$K$J$$%a%=%C%I$O%l%7!<%P!<$N%/%i%9$rJV$7$?$[$&$,NI$$$H;W$$$^$9!#(B

$BF146$G$9$,!"$$$D!"$,$$$$$N$G$7$g$&$M!#(B


$B$=$l$G$O!#(B
Posted by mame (Yusuke Endoh) (Guest)
on 2013-02-07 15:13
(Received via mailing list)
Issue #7625 has been updated by mame (Yusuke Endoh).


matz (Yukihiro Matsumoto) wrote:
> 正直なところ、どうして1.9.3と2.0の挙動が異なってしまっているのか経緯を把握してないので適切な答えはできません。

#7768 の修正で入った r39004 の副作用で、2.0 の挙動は 1.9.2 の挙動に戻りました。

> ただ、ArrayにあってEnumerableにないメソッドはレシーバーのクラスを返したほうが良いと思います。

たまたま現在の挙動が matz の好みということになります。
2.0.0-rc2 はその挙動でいきましょう。それで重大な問題が報告されなければ、p0 もそのままで。
なお、rails 等に影響を与えない公算が高いと思っています (1.9.2 と同じ挙動のはずなので) 。

1.9.3 を変えるかどうかはうささんにお任せします。

--
Yusuke Endoh <mame@tsg.ne.jp>
----------------------------------------
Bug #7625: Arrayを継承したオブジェクトのcompactがArrayを返す
https://bugs.ruby-lang.org/issues/7625#change-35986

Author: mogya@mogya.com (Daisuke Furukawa)
Status: Assigned
Priority: Normal
Assignee: matz (Yukihiro Matsumoto)
Category: core
Target version: 2.0.0
ruby -v: ruby 1.9.3p362 (2012-12-25 revision 38607) [x86_64-linux]


現象:
 ruby 1.9.3で、Arrayを継承したクラスのcompactメソッドを呼び出したとき、
Arrayクラスのオブジェクトが帰ってくる

期待している結果
  継承したクラスのオブジェクトが帰ってくる

再現コード
========
$ ruby -v
ruby 1.9.2p320 (2012-04-20 revision 35421) [i686-linux]
$ irb
irb(main):001:0> class Array2 < Array; end
irb(main):002:0> p Array2.new().compact.class.name
"Array2"
========
$ ruby -v
ruby 1.9.3p362 (2012-12-25 revision 38607) [x86_64-linux]
$ irb
irb(main):001:0> class Array2 < Array; end
irb(main):002:0> p Array2.new().compact.class.name
"Array"
========

他に調べたこと

・ruby 1.9.3p327も、p362 と同じ挙動でした
・compactの代わりにuniqを使っても同様の問題が発生
・1.9.3でも、Stringクラスを使って
  s = String2.new().concat("") だとString2クラスのオブジェクトが帰ってきてます

see also: 
http://blade.nagaokaut.ac.jp/cgi-bin/scat.rb/ruby/...
Posted by U.Nakamura (Guest)
on 2013-02-07 15:31
(Received via mailing list)
$B$3$s$K$A$O!"$J$+$`$i(B($B$&(B)$B$G$9!#(B

In message "[ruby-dev:46942] [ruby-trunk - Bug #7625] 
Array$B$r7Q>5$7$?%*%V%8%'%/%H$N(Bcompact$B$,(BArray$B$rJV$9(B"
    on Feb.07,2013 23:12:55, <mame@tsg.ne.jp> wrote:
> 1.9.3 $B$rJQ$($k$+$I$&$+$O$&$5$5$s$K$*G$$;$7$^$9!#(B

$B%P%0$@$C$?$N$J$i(B1.9.3$B$bEvA3JQ$($^$9!#(B
$B;EMM$@$C$?$N$J$iEvA3$=$N$^$^$G$9!#(B
($BCfESH>C<$JNc$,$"$k$N$OGD0.$7$F$^$9$,(B)

$B$I$C$A$J$s$G$7$g$&$+(B...


$B$=$l$G$O!#(B
Posted by matz (Yukihiro Matsumoto) (Guest)
on 2013-02-07 15:31
(Received via mailing list)
Issue #7625 has been updated by matz (Yukihiro Matsumoto).


ふむ。まあ、同感なんですが、それはそれとして charliesome には「もうRCだから変更すんな」と釘を刺すべきでは無いですかね。

Matz.

----------------------------------------
Bug #7625: Arrayを継承したオブジェクトのcompactがArrayを返す
https://bugs.ruby-lang.org/issues/7625#change-35988

Author: mogya@mogya.com (Daisuke Furukawa)
Status: Assigned
Priority: Normal
Assignee: matz (Yukihiro Matsumoto)
Category: core
Target version: 2.0.0
ruby -v: ruby 1.9.3p362 (2012-12-25 revision 38607) [x86_64-linux]


現象:
 ruby 1.9.3で、Arrayを継承したクラスのcompactメソッドを呼び出したとき、
Arrayクラスのオブジェクトが帰ってくる

期待している結果
  継承したクラスのオブジェクトが帰ってくる

再現コード
========
$ ruby -v
ruby 1.9.2p320 (2012-04-20 revision 35421) [i686-linux]
$ irb
irb(main):001:0> class Array2 < Array; end
irb(main):002:0> p Array2.new().compact.class.name
"Array2"
========
$ ruby -v
ruby 1.9.3p362 (2012-12-25 revision 38607) [x86_64-linux]
$ irb
irb(main):001:0> class Array2 < Array; end
irb(main):002:0> p Array2.new().compact.class.name
"Array"
========

他に調べたこと

・ruby 1.9.3p327も、p362 と同じ挙動でした
・compactの代わりにuniqを使っても同様の問題が発生
・1.9.3でも、Stringクラスを使って
  s = String2.new().concat("") だとString2クラスのオブジェクトが帰ってきてます

see also: 
http://blade.nagaokaut.ac.jp/cgi-bin/scat.rb/ruby/...
Posted by mame (Yusuke Endoh) (Guest)
on 2013-02-07 15:45
(Received via mailing list)
Issue #7625 has been updated by mame (Yusuke Endoh).


matz (Yukihiro Matsumoto) wrote:
> ふむ。まあ、同感なんですが、それはそれとして charliesome には「もうRCだから変更すんな」と釘を刺すべきでは無いですかね。

IRC で話した感じでは反省してくれてました。
というか、もう RC だから遠藤がもっと監視してる体制でないといけないんですが、全然余力がなくてすみません。
多分明日の晩には ruby_2_0_0 ブランチを切るんで、そこからリリースまではなるべく全コミットを把握するように努めます。

--
Yusuke Endoh <mame@tsg.ne.jp>
----------------------------------------
Bug #7625: Arrayを継承したオブジェクトのcompactがArrayを返す
https://bugs.ruby-lang.org/issues/7625#change-35994

Author: mogya@mogya.com (Daisuke Furukawa)
Status: Assigned
Priority: Normal
Assignee: matz (Yukihiro Matsumoto)
Category: core
Target version: 2.0.0
ruby -v: ruby 1.9.3p362 (2012-12-25 revision 38607) [x86_64-linux]


現象:
 ruby 1.9.3で、Arrayを継承したクラスのcompactメソッドを呼び出したとき、
Arrayクラスのオブジェクトが帰ってくる

期待している結果
  継承したクラスのオブジェクトが帰ってくる

再現コード
========
$ ruby -v
ruby 1.9.2p320 (2012-04-20 revision 35421) [i686-linux]
$ irb
irb(main):001:0> class Array2 < Array; end
irb(main):002:0> p Array2.new().compact.class.name
"Array2"
========
$ ruby -v
ruby 1.9.3p362 (2012-12-25 revision 38607) [x86_64-linux]
$ irb
irb(main):001:0> class Array2 < Array; end
irb(main):002:0> p Array2.new().compact.class.name
"Array"
========

他に調べたこと

・ruby 1.9.3p327も、p362 と同じ挙動でした
・compactの代わりにuniqを使っても同様の問題が発生
・1.9.3でも、Stringクラスを使って
  s = String2.new().concat("") だとString2クラスのオブジェクトが帰ってきてます

see also: 
http://blade.nagaokaut.ac.jp/cgi-bin/scat.rb/ruby/...
Posted by shugo (Shugo Maeda) (Guest)
on 2013-02-08 06:04
(Received via mailing list)
Issue #7625 has been updated by shugo (Shugo Maeda).


mame (Yusuke Endoh) wrote:
> > ただ、ArrayにあってEnumerableにないメソッドはレシーバーのクラスを返したほうが良いと思います。
>
> たまたま現在の挙動が matz の好みということになります。

いや、そうなっていないと思います。

  $ ./ruby -ve 'class Foo < Array; end; p Foo[2,1,3].sort.class'
  ruby 2.0.0dev (2013-02-08 trunk 39154) [i686-linux]
  Foo

sortはEnumerableにもあるメソッドなので、まつもとさんの考えでは常にArrayを返す
べきということになると思います。
# 将来ArrayにしかないメソッドがEnumerableにも追加されたらどうするかとか考える
# と、本当にまつもとさんの方針でよいのかもちょっと検討の余地があるように思いますが。

> 2.0.0-rc2 はその挙動でいきましょう。それで重大な問題が報告されなければ、p0 もそのままで。
> なお、rails 等に影響を与えない公算が高いと思っています (1.9.2 と同じ挙動のはずなので) 。

現状まつもとさんの意図が正しく反映されているか疑問ですので、r39004はいったん
revertすべきだと思います。
これがバグ修正扱いなのであれば2.0.0が出た後で直してもよいと思いますし、仕様変更
なのであれば今さら入るのはおかしいのではないですか?

----------------------------------------
Bug #7625: Arrayを継承したオブジェクトのcompactがArrayを返す
https://bugs.ruby-lang.org/issues/7625#change-36038

Author: mogya@mogya.com (Daisuke Furukawa)
Status: Assigned
Priority: Normal
Assignee: matz (Yukihiro Matsumoto)
Category: core
Target version: 2.0.0
ruby -v: ruby 1.9.3p362 (2012-12-25 revision 38607) [x86_64-linux]


現象:
 ruby 1.9.3で、Arrayを継承したクラスのcompactメソッドを呼び出したとき、
Arrayクラスのオブジェクトが帰ってくる

期待している結果
  継承したクラスのオブジェクトが帰ってくる

再現コード
========
$ ruby -v
ruby 1.9.2p320 (2012-04-20 revision 35421) [i686-linux]
$ irb
irb(main):001:0> class Array2 < Array; end
irb(main):002:0> p Array2.new().compact.class.name
"Array2"
========
$ ruby -v
ruby 1.9.3p362 (2012-12-25 revision 38607) [x86_64-linux]
$ irb
irb(main):001:0> class Array2 < Array; end
irb(main):002:0> p Array2.new().compact.class.name
"Array"
========

他に調べたこと

・ruby 1.9.3p327も、p362 と同じ挙動でした
・compactの代わりにuniqを使っても同様の問題が発生
・1.9.3でも、Stringクラスを使って
  s = String2.new().concat("") だとString2クラスのオブジェクトが帰ってきてます

see also: 
http://blade.nagaokaut.ac.jp/cgi-bin/scat.rb/ruby/...
Posted by KOSAKI Motohiro (Guest)
on 2013-02-08 06:11
(Received via mailing list)
>> 2.0.0-rc2 $B$O$=$N5sF0$G$$$-$^$7$g$&!#$=$l$G=EBg$JLdBj$,Js9p$5$l$J$1$l$P!"(Bp0 
$B$b$=$N$^$^$G!#(B
>> $B$J$*!"(Brails $BEy$K1F6A$rM?$($J$$8x;;$,9b$$$H;W$C$F$$$^$9(B (1.9.2 
$B$HF1$85sF0$N$O$:$J$N$G(B) $B!#(B
>
> 
$B8=>u$^$D$b$H$5$s$N0U?^$,@5$7$/H?1G$5$l$F$$$k$+5?Ld$G$9$N$G!"(Br39004$B$O$$$C$?$s(B
> revert$B$9$Y$-$@$H;W$$$^$9!#(B
> 
$B$3$l$,%P%0=$@507$$$J$N$G$"$l$P(B2.0.0$B$,=P$?8e$GD>$7$F$b$h$$$H;W$$$^$9$7!";EMMJQ99(B
> $B$J$N$G$"$l$P:#$5$iF~$k$N$O$*$+$7$$$N$G$O$J$$$G$9$+(B?

$B5DO@$NM>CO$,$"$k$J$iLdEzL5MQ(Brevert$B$K0lI<!#$"$o$F$F?J$a$F5H$,=P$k$3$H$O>/$J$$$h!#(B
Posted by shugo (Shugo Maeda) (Guest)
on 2013-02-08 06:27
(Received via mailing list)
Issue #7625 has been updated by shugo (Shugo Maeda).


#7768の方にもコメントしましたので、議論の続きは(もしあれば)そちらでやりましょう。

----------------------------------------
Bug #7625: Arrayを継承したオブジェクトのcompactがArrayを返す
https://bugs.ruby-lang.org/issues/7625#change-36042

Author: mogya@mogya.com (Daisuke Furukawa)
Status: Assigned
Priority: Normal
Assignee: matz (Yukihiro Matsumoto)
Category: core
Target version: 2.0.0
ruby -v: ruby 1.9.3p362 (2012-12-25 revision 38607) [x86_64-linux]


現象:
 ruby 1.9.3で、Arrayを継承したクラスのcompactメソッドを呼び出したとき、
Arrayクラスのオブジェクトが帰ってくる

期待している結果
  継承したクラスのオブジェクトが帰ってくる

再現コード
========
$ ruby -v
ruby 1.9.2p320 (2012-04-20 revision 35421) [i686-linux]
$ irb
irb(main):001:0> class Array2 < Array; end
irb(main):002:0> p Array2.new().compact.class.name
"Array2"
========
$ ruby -v
ruby 1.9.3p362 (2012-12-25 revision 38607) [x86_64-linux]
$ irb
irb(main):001:0> class Array2 < Array; end
irb(main):002:0> p Array2.new().compact.class.name
"Array"
========

他に調べたこと

・ruby 1.9.3p327も、p362 と同じ挙動でした
・compactの代わりにuniqを使っても同様の問題が発生
・1.9.3でも、Stringクラスを使って
  s = String2.new().concat("") だとString2クラスのオブジェクトが帰ってきてます

see also: 
http://blade.nagaokaut.ac.jp/cgi-bin/scat.rb/ruby/...
Posted by usa (Usaku NAKAMURA) (Guest)
on 2013-02-08 12:05
(Received via mailing list)
Issue #7625 has been updated by usa (Usaku NAKAMURA).

Status changed from Assigned to Closed

#7768 を残してこちらは閉じます。
----------------------------------------
Bug #7625: Arrayを継承したオブジェクトのcompactがArrayを返す
https://bugs.ruby-lang.org/issues/7625#change-36053

Author: mogya@mogya.com (Daisuke Furukawa)
Status: Closed
Priority: Normal
Assignee: matz (Yukihiro Matsumoto)
Category: core
Target version: 2.0.0
ruby -v: ruby 1.9.3p362 (2012-12-25 revision 38607) [x86_64-linux]


現象:
 ruby 1.9.3で、Arrayを継承したクラスのcompactメソッドを呼び出したとき、
Arrayクラスのオブジェクトが帰ってくる

期待している結果
  継承したクラスのオブジェクトが帰ってくる

再現コード
========
$ ruby -v
ruby 1.9.2p320 (2012-04-20 revision 35421) [i686-linux]
$ irb
irb(main):001:0> class Array2 < Array; end
irb(main):002:0> p Array2.new().compact.class.name
"Array2"
========
$ ruby -v
ruby 1.9.3p362 (2012-12-25 revision 38607) [x86_64-linux]
$ irb
irb(main):001:0> class Array2 < Array; end
irb(main):002:0> p Array2.new().compact.class.name
"Array"
========

他に調べたこと

・ruby 1.9.3p327も、p362 と同じ挙動でした
・compactの代わりにuniqを使っても同様の問題が発生
・1.9.3でも、Stringクラスを使って
  s = String2.new().concat("") だとString2クラスのオブジェクトが帰ってきてます

see also: 
http://blade.nagaokaut.ac.jp/cgi-bin/scat.rb/ruby/...
Posted by Yusuke Endoh (Guest)
on 2013-02-08 12:15
(Received via mailing list)
$B%A%1%C%H<+BN$NBP=h$O8~$3$&$K=q$-$^$7$?DL$j(B revert $B$G$$$$$G$9!#(B
$BH=CG$,JQ$o$C$F$9$_$^$;$s!#(B


$B0J2<!"8@$$Lu!#(B

2013/02/08 shugo (Shugo Maeda) <redmine@ruby-lang.org>:
> $B$3$l$,%P%0=$@507$$$J$N$G$"$l$P(B2.0.0$B$,=P$?8e$GD>$7$F$b$h$$$H;W$$$^$9$7!"(B

$B!V<B$O$3$l$O%P%0$@$C$?$s$@$h!*!*!W$H8@$C$F5sF0$rJQ$($k$N$O7h$7$F(B
$B9%$^$7$$$3$H$G$O$J$$$G$9$h$M!#:#2s$O(B matz $B$,4uK>$rL@3N$K8@$C$F$k(B
$B$N$G!"$J$k$Y$/$=$N2j$rE&$s$G$*$-$?$/$F!#(B

$B$b$A$m$s$I$3$+$G%-%j$rIU$1$kI,MW$O$"$k$N$G$9$,!"$=$N%-%j$O(B rc2
$B$@$H9M$($F$$$k!J(Brc2 $B$^$G$ODL>o$N%P%0=$@5$r5v2D$7$F$^$9$7!K$N$G!"(B
$B8=>u$G9T$1$k$J$i9T$-$?$+$C$?$N$G$7$?!#(B

$B!J$J$*(B rc1 $B$,(B release candidate 
$B$NL>$K$=$0$o$J$$<BBN$K$J$C$?$N$O(B
$B%9%1%8%e!<%k%_%9$G$9!#$3$l$bH?>J$7$F$^$9!K(B


> $B;EMMJQ99$J$N$G$"$l$P:#$5$iF~$k$N$O$*$+$7$$$N$G$O$J$$$G$9$+(B?

$B8@$&$^$G$b$J$$$N$G8@$C$F$^$;$s$,(B matz $B$@$1$OJL3J$@$H;W$$$^$9!#(B

$B1sF#$O(B 2.0.0 $B$NJQ99$KBP$9$k5qH]8"$r;}$C$F$k$D$b$j$G$9$,!"$=$l$O(B
$B%j%j!<%9$r1_3j$K?J$a$k$3$H$,L\E*$J$N$G!":#2s$O$`$7$m5qH]8"$rH/F0(B
$B$7$J$$$[$&$,%j%j!<%9$,1_3j$K?J$`$H;W$C$?$N$G$7$?!#(B
$B!J$7$+$7(B matz $B$,$I$N$/$i$$JQ$($?$,$C$F$$$k$+$rFI$_4V0c$($?46$b!K(B

$B0J>e!"8@$$Lu$G$7$?!#(B


$B$H$K$+$/!"$$$m$$$mH=CG8m$C$?$jM%=@ITCG$KJQ$($?$j$7$F$9$_$^$;$s!#(B
$B:#8e$b$7$P$7$P8m$k$H;W$$$^$9$,!"@829$+$/$40U8+$/$@$5$$!#(B

$B$J$*!">e5-$NDL$j(B rc2 $B0J9_$O5qH]8"A43+$NM=Dj$G$9!#(B
Posted by Shugo Maeda (Guest)
on 2013-02-08 13:41
(Received via mailing list)
$BA0ED$G$9!#(B

2013$BG/(B2$B7n(B8$BF|(B 20:15 Yusuke Endoh <mame@tsg.ne.jp>:
> $B%A%1%C%H<+BN$NBP=h$O8~$3$&$K=q$-$^$7$?DL$j(B revert $B$G$$$$$G$9!#(B
> $BH=CG$,JQ$o$C$F$9$_$^$;$s!#(B

$B$$$(!"N;2r$G$9!#(B

$B1sF#$5$s$r@U$a$k$D$b$j$O$J$$$N$G$9$,!"0l1~8@$$Lu$K$b%3%a%s%H$7$^$9!#(B

> 2013/02/08 shugo (Shugo Maeda) <redmine@ruby-lang.org>:
>> $B$3$l$,%P%0=$@507$$$J$N$G$"$l$P(B2.0.0$B$,=P$?8e$GD>$7$F$b$h$$$H;W$$$^$9$7!"(B
>
> $B!V<B$O$3$l$O%P%0$@$C$?$s$@$h!*!*!W$H8@$C$F5sF0$rJQ$($k$N$O7h$7$F(B
> $B9%$^$7$$$3$H$G$O$J$$$G$9$h$M!#:#2s$O(B matz $B$,4uK>$rL@3N$K8@$C$F$k(B
> $B$N$G!"$J$k$Y$/$=$N2j$rE&$s$G$*$-$?$/$F!#(B
>
> $B$b$A$m$s$I$3$+$G%-%j$rIU$1$kI,MW$O$"$k$N$G$9$,!"$=$N%-%j$O(B rc2
> $B$@$H9M$($F$$$k!J(Brc2 $B$^$G$ODL>o$N%P%0=$@5$r5v2D$7$F$^$9$7!K$N$G!"(B
> $B8=>u$G9T$1$k$J$i9T$-$?$+$C$?$N$G$7$?!#(B

Redmine$B$r8+$k$+$.$j!"%P%0$+;EMMJQ99$+!"$^$?(B2.0.0$B$G=$@5$9$Y$-$+$H$$$&E@$K$D$$$F!"(B
$B$^$D$b$H$5$s$,L@3N$K0U8+I=L@$r$7$F$$$J$$$H$$$&G'<1$G$7$?!#(B
# $B!VD>$9%?%$%_%s%0$O$$$D$,$$$$$N$+$J!#!W$H$*$C$7$c$C$F$^$7$?$7!#(B

$B$^$D$b$H$5$s$+$i7kO@$,=P$F$$$k$N$G$"$l$P!"H?BP$O$7$^$;$s!#(B

>> $B;EMMJQ99$J$N$G$"$l$P:#$5$iF~$k$N$O$*$+$7$$$N$G$O$J$$$G$9$+(B?
>
> $B8@$&$^$G$b$J$$$N$G8@$C$F$^$;$s$,(B matz $B$@$1$OJL3J$@$H;W$$$^$9!#(B

$B$O$$!"$=$l$OM}2r$7$F$$$^$9!#(B
$B$7$+$7!">e5-$N$h$&$JM}M3$G!":#2s$N7o$O$^$@7kO@$,=P$F$$$J$$$H$$$&M}2r$G$7$?!#(B
$B$^$?!"$^$D$b$H$5$s$N0U8+$O(B($BF|K\8l$G=q$+$l$?$?$a(B)charliesome$B$KFO$$$F$$$^$;$s$G$7$?$7!#(B

$B1sF#$5$s$,3F(Bissue$B$N>\:Y$^$GGD0.$9$k$N$OFq$7$$$H;W$$$^$9$N$G!"$3$&$$$&;~$OJ]<iE*$J(B
$BH=CG$r$7$F$$$?$@$$$?J}$,$h$$$N$G$O$J$$$+$H;W$$$^$9!#(B
Please log in before posting. Registration is free and takes only a minute.
Existing account (Switch to SSL-encrypted connection)
NEW: Do you have a Google/GoogleMail or Yahoo account? No registration required!
Log in with Google account | Log in with Yahoo account
No account? Register here.