From: "Ara.T.Howard" Date: 2004-02-14T23:54:56+09:00 Subject: Re: accessing constants from class methods On Sat, 14 Feb 2004, daz wrote: > Date: Sat, 14 Feb 2004 08:24:08 -0000 > From: daz > Newsgroups: comp.lang.ruby > Subject: Re: accessing constants from class methods > > > "Ara.T.Howard" wrote: > > > > what i would like to accomplish would be something like this: > > > > > > class Abstract > > class << self > > def x > > # defined?(self::X) ? self::X : nil > > end > > end > > end > > > > class Concrete < Abstract > > X = 42 > > end > > > > # p Base.x # => nil > > # p Derived.x # => 42 > > > > > > does this make sense? in essence i want an abstract class method with the > > semantics of "iff a concrete class has defined a certain constant, return it" > > > > the problem is that 'self::X' above tries to reference 'Class::X', if i > > replace 'self' with 'Abstract' then i will be referencing the incorrect 'X'... > > > > how does one say 'the constant of the current class' from within a class > > method? > > > > #----- > > class A > class << self > def x > const_defined?(:X) ? const_get(:X) : nil > end > end > end > > class C < A > X = 42 > end > > p A.x # => nil > p C.x # => 42 > > #----- > > > daz perfect! -a -- =============================================================================== | EMAIL :: Ara [dot] T [dot] Howard [at] noaa [dot] gov | PHONE :: 303.497.6469 | ADDRESS :: E/GC2 325 Broadway, Boulder, CO 80305-3328 | URL :: http://www.ngdc.noaa.gov/stp/ | TRY :: for l in ruby perl;do $l -e "print \"\x3a\x2d\x29\x0a\"";done ===============================================================================