Accessing class constants in included modules

module Foo
  def display
    puts self.class::A
  end
end

class Bar
  A = 5
  include Foo
end

class Baz
  A = 6
  include Foo
end

Bar.new.display
Baz.new.display

Anything cleaner-looking than self.class::Constant to access the
constant from a method defined in the module?

martin

Martin DeMello wrote:

module Foo
def display
   puts self.class::A
end
end

class Bar
A = 5
include Foo
end

class Baz
A = 6
include Foo
end

Bar.new.display
Baz.new.display

Anything cleaner-looking than self.class::Constant to access the
constant from a method defined in the module?

martin

Here's a trick I use to beautify access to constants:

class Object
   def my
     self.class
   end
end

....Now all constants can be accessed with my::Constant.

I find it more readable. Certainly less typing!

Cheers,
Tom Agnew

Ah - nice!

martin

···

On 11/9/06, Tom Agnew <agnewtj@nospam.net> wrote:

Here's a trick I use to beautify access to constants:

class Object
   def my
     self.class
   end
end

....Now all constants can be accessed with my::Constant.

I find it more readable. Certainly less typing!

Martin DeMello wrote:

Here's a trick I use to beautify access to constants:

class Object
   def my
     self.class
   end
end

....Now all constants can be accessed with my::Constant.

I find it more readable. Certainly less typing!

Ah - nice!

This may be a corner case, but if you're going to define #my at the instance level, it should probably be based on the (singleton|eigen)class of the instance and not the "birth" class:

class Object
   def my
     self.class
     #class << self; self; end
   end
end

class Foo
   C = 2
end

x = Foo.new
class << x
   X = 3
end

p x.my::C
p x.my::X

Now try it with the alternative!

···

On 11/9/06, Tom Agnew <agnewtj@nospam.net> wrote:

--
       vjoel : Joel VanderWerf : path berkeley edu : 510 665 3407