rurema / doctree

Repository of Japanese Ruby reference manual
https://docs.ruby-lang.org/ja/
245 stars 315 forks source link

StringIO はもはや Data を継承していない #2880

Closed scivola closed 4 months ago

scivola commented 5 months ago

https://docs.ruby-lang.org/ja/latest/class/StringIO.html によれば StringIO が Data を継承していることになっていますが,これはかなり昔のことであるようです。

いつ継承しなくなったのかきちんと調べていませんが,以下の実験によれば,Ruby 2.4.10 のときは Data を継承しており,Ruby 2.7.8 では継承していません。

Ruby 2.4.10:

% ruby -r stringio -e "p StringIO.ancestors"
[StringIO, IO::generic_writable, IO::generic_readable, Enumerable, Data, Object, Kernel, BasicObject]

Ruby 2.7.8:

% ruby -r stringio -e "p StringIO.ancestors"
[StringIO, IO::generic_writable, IO::generic_readable, Enumerable, Object, Kernel, BasicObject]

Ruby 3.3.0:

% ruby -r stringio -e "p StringIO.ancestors"
[StringIO, IO::generic_writable, IO::generic_readable, Enumerable, Object, Kernel, BasicObject]

Ruby 2.x までの Data は影のような存在だったのでリファレンスマニュアルのこの誤りは大した問題ではなかったと思いますが,Ruby 3.0.0 でいったん廃止されたあと Ruby 3.2.0 で同名のクラスが導入されたために,重大問題になってしまいました。(実際,現行のリファレンスを信じて 1 時間溶かしました)

どこを直せばよいか分からないので,プルリクエスト作れません。すみません。

ohai commented 4 months ago

2.7以前の変更なので単純に置きかえてしまってかまいません。

ということで Enumerable の追加もついでにして修正しました。