From: Minero Aoki Date: 2006-12-05T00:16:52+09:00 Subject: [ruby-dev:29991] Re: Module#constants excluding superclass 青木です。 In mail "[ruby-dev:29989] Module#constants excluding superclass" Nobuyoshi Nakada wrote: > なかだです。 > > http://jp.rubyist.net/magazine/?0017-CodeReview#l16 にあった件 > のパッチです。 > > むしろ、そういう場合は const_get, const_defined? を使ってくれ、 > といいたい気もしますが。 いえ、あれは、const_get や const_defined? ではダメだから困るという ことです。現状の仕様では、 class A CONST = 1 end class B CONST = 1 end このようなクラス A, B があるとき、CONST が B の直下で (再) 定義され たかどうか判定できません。 ~ % cat t class A CONST = 1 end class B < A CONST = 1 end p A.const_defined?(:CONST) == B.const_defined?(:CONST) p A.const_get(:CONST) == B.const_get(:CONST) p A.const_get(:CONST).equal?(B.const_get(:CONST)) p A.constants.sort == B.constants.sort ~ % forall-ruby t ruby 1.8.0 (2003-08-04) [x86_64-linux] true true true true ruby 1.8.1 (2003-12-25) [x86_64-linux] true true true true ruby 1.8.2 (2004-12-25) [x86_64-linux] true true true true ruby 1.8.3 (2005-09-21) [x86_64-linux] true true true true ruby 1.8.4 (2005-12-24) [x86_64-linux] true true true true ruby 1.8.5 (2006-08-25) [x86_64-linux] true true true true ruby 1.8.5 (2006-10-23) [x86_64-linux] true true true true ruby 1.9.0 (2006-12-04 patchlevel 0) [x86_64-linux] true true true true -- 青木峰郎