チケット #3154 が更新されました。 (by Yusuke Endoh)


遠藤です。

2010年4月16日7:24 ujihisa . <redmine / ruby-lang.org>:
> ruby 1.9.2から、あるクラスに対してどのその親クラスからもallocate new superclassの3つのメソッドがpublic_methods(false)の一覧に出てこなくなったのですが、これは意図的な仕様変更なのでしょうか。

すみません、実は以前から認識していて、直さなきゃなーとは思って
ました。

前に調べた時は [ruby-core:28837] [Bug #2993] のための r27085 に
よる影響との自分内結論でした。
[ruby-core:28837] は instance_methods を修正することを意図して
いたため、public_methods に影響が出たのは意図はしていなかったと
思います。

それでもなぜ報告していなかったかというと、これは元々の方がバグ
だったと思われるためです。


> これが意図しない変更であった場合、自クラスとその全ての親クラスのpublic_methodsやsingleton_methodsに挙げられていないにも関わらずパブリックに呼び出せるメソッドがあるのは、ちょっと不思議な挙動のように感じます。

public_methods(true) ならちゃんと出てくるので問題ないです。

  $ ./ruby -e 'class A; end; p A.public_methods(true).sort.grep(/super/)'
  [:superclass]

public_methods(false) は A に直接所属するメソッド一覧を得ます
が、superclass たちは Class に所属するため、出てこなくて正常
です。
1.public_methods(false) に floor は出てきませんが、1.floor が
動くのと同じです (Numeric#floor) 。

というわけで、rubyspec 側を修正しといてもらえますでしょうか。
1.8 に backport されるかどうかは、卜部さんや knu さんに聞いて
ください。

-- 
Yusuke ENDOH <mame / tsg.ne.jp
----------------------------------------
http://redmine.ruby-lang.org/issues/show/3154

----------------------------------------
http://redmine.ruby-lang.org