From: "David A. Black" Date: 2005-02-13T06:45:38+09:00 Subject: Re: const_defined? and inheritance Hi -- On Sun, 13 Feb 2005, Kevin Howe wrote: >>> class A >>> FOO = 'BAR' >>> end >>> >>> class B < A; end >>> >>> puts A.const_get(:FOO) # => 'BAR' >>> puts A.const_defined?(:FOO) # => true >>> puts B.const_get(:FOO) # => 'BAR' >>> puts B.const_defined?(:FOO) # => false >>> > >> I think they're just two different operations. The constants a module >> can see ("get") is a superset of the constants it's defined. > > If that were the case then B.const_get(:FOO) would raise an error since B > does not define FOO. Instead it inherits it from A, and returns the > inherited value of "BAR". But you are probably right in the sense that > const_defined? shows only those explicitly set in that particular class. Yes, that's what I meant (and thought I'd said :-) B can see A's FOO, but B has not defined a FOO. "defined?", on that construction, means "defined_by_the_receiver?", rather than "defined_somewhere_and_visible_to_the_receiver?" > I'll just use constants.include?('FOO') instead. To put a positive spin on it: note that Ruby gives you a way of looking up constants on pretty much any of the possible criteria you'd want to. David -- David A. Black dblack@wobblini.net