ruby-reference-manual:3651
From: "sho-h (Sho Hashimoto)" <sho-h@n...>
Date: Sat, 27 Apr 2013 10:36:22 +0900
Subject: [ruby-reference-manual:3651] [るりまプロジェクト - Bug #8280] Struct の説明の修正
Issue #8280 has been updated by sho-h (Sho Hashimoto). =begin 確認しました。Struct.new と Struct.members の修正は revert すべきですね。(上記の確認結果をちゃんと反映できていないという...orz) ただ、Struct#each などは定義されているのでやはり元々の表記が間違っていると感じました。znz さんの指摘は正しいと思っていますがるりま上の表記はそれを考慮して見なおしてもおかしいと思いました。また、本当に下位クラスにしかない Struct.new と Struct.members と同じ表現なのも誤解を招きやすいと思いました。インスタンスメソッドの方は概要として表示される行に書く必要もないと感じています。 そのため、インスタンスメソッドについては、「このメソッドは Struct の下位クラスにのみ定義されています」ではなく、明示的に以下のようにするのが良いのではないかと思いました。コード例までは不要だと考えています。 [注意] 本メソッドの記述は Struct の下位クラスのインスタンスに対して呼び出す事を想定しています。Struct.new は Struct の下位クラスを作成する点に注意してください。 =end ---------------------------------------- Bug #8280: Struct の説明の修正 https://bugs.ruby-lang.org/issues/8280#change-38940 Author: sho-h (Sho Hashimoto) Status: Assigned Priority: Normal Assignee: sho-h (Sho Hashimoto) Category: Target version: reporter: ruby_version: =begin Struct の「このメソッドは Struct の下位クラスにのみ定義されています」はすべて不要ではないかと思いました。 * ((<URL:http://doc.ruby-lang.org/ja/1.9.3/class/Struct.html>)) 現在の記述は make_struct(Struct.new で呼ばれる関数) の中で new、[]、members を rb_define_singleton_method してるからかもしれません(each と each_pair も「このメソッドは...」とある理由はわかりませんでしたが...) 1.8.7 での以下の確認結果だけ見ても不要そうです。 $ irb > Foo = Struct.new(:a) > Struct.public_instance_methods(false) # => ["eql?", "each_pair", "members", "==", "to_s", "[]", "[]=", "hash", "to_a", "size", "values_at", "length", "select", "values", "each", "inspect"] Foo.public_instance_methods(false) # => ["a", "a="] > RUBY_VERSION # => "1.8.7" $ grep rb_define_ 1.8/ruby-1.8.7-p358/struct.c | grep rb_cStruct ... rb_define_method(rb_cStruct, "each", rb_struct_each, 0); rb_define_method(rb_cStruct, "each_pair", rb_struct_each_pair, 0); rb_define_method(rb_cStruct, "[]", rb_struct_aref, 1); rb_define_method(rb_cStruct, "[]=", rb_struct_aset, 2); rb_define_method(rb_cStruct, "select", rb_struct_select, -1); rb_define_method(rb_cStruct, "values_at", rb_struct_values_at, -1); rb_define_method(rb_cStruct, "members", rb_struct_members_m, 0); 実質影響はないので今までこのままだったのかもしれませんが、「このメソッドは...」については近い内に削除してしまおうかと思います。 =end -- http://bugs.ruby-lang.org/ -- ML: ruby-reference-manual@m... Info: http://QuickML.com/
3634 2013-04-16 16:59 [sho-h@n... ] [るりまプロジェクト - Bug #8280][Open] Struct の説明の修正 3645 2013-04-25 02:35 ┣[redmine@r... ] [るりまプロジェクト - Bug #8280][Assigned] Struct の説明の修正 3649 2013-04-25 06:20 ┣[sho-h@n... ] [るりまプロジェクト - Bug #8280] Struct の説明の修正 -> 3651 2013-04-27 03:36 ┣[sho-h@n... ] [るりまプロジェクト - Bug #8280] Struct の説明の修正 3660 2013-05-07 15:24 ┣[sho-h@n... ] [るりまプロジェクト - Bug #8280] Struct の説明の修正 3665 2013-05-10 13:29 ┗[sho-h@n... ] [るりまプロジェクト - Bug #8280][Closed] Struct の説明の修正