From: Rich Kilmer Date: 2001-10-07T03:58:32+09:00 Subject: [ruby-talk:22165] RE: Creating external accessors for class constants Yes...I am replying to myself... you can access a constant by: - class::constant or "Airlines::AA" I did not realize this :) > -----Original Message----- > From: Rich Kilmer [mailto:rich@infoether.com] > Sent: Saturday, October 06, 2001 2:41 PM > To: ruby-talk ML > Subject: [ruby-talk:22164] Creating external accessors for class > constants > > > I find myself wanting to use class constants more globally in my > code. Because of Ruby's encapsulation rules, every attribute > (and constant) is private. A helper method exists on Module to > simplify externalizing attributes: > > attr, attr_accessor, attr_reader, attr_writer > > I was wondering whether it would make sense to have a similar > method for class constants? > > const_reader > > defined as follows.... > > # add the const_reader method to Module > class Module > def const_reader(*symbols) > symbols.each do |symbol| > class_eval "def #{self.name}.#{symbol.to_s}; #{symbol.to_s}; end" > end > end > end > > # define constants and export them via const_reader: > class Airlines > AA="American Airlines" > BA="British Airways" > const_reader :AA, :BA > end > > # These constants are now accessible via class methods (publicly) > # but (still) as constants internal to the class (no method overhead). > > puts Airlines.AA # => "American Airlines" > puts Airlines.BA # => "British Airways" > > -Rich Kilmer >