Hi folks,
I have a class definition as follows:
class Level
attr_reader :name, :rank
def initialize( name, rank )
@name, @rank = name, rank
end
TRACE = Comparable.new( :TRACE, 1000 )
DEBUG = Comparable.new( :DEBUG, 2000 )
INFO = Comparable.new( :INFO, 3000 )
# etc
end
and I'd like to define the constants in a more ruby-esque way; something like:
class Level
attr_reader :name, :rank
def initialize( name, rank )
@name, @rank = name, rank
end
%w{TRACE DEBUG INFO CHANGE WARN ERROR FATAL}.each_with_index do |name,i|
clever_dynamic_hackery( name, Comparable.new( name.to_sym, i*1000 ) )
end
end
but I don't know what that clever_dyanamic_hackery method should actually be. Any one want to show me the light?
Cheers,
Pete
Apologies, s/Comparable/Level/ in the example code.
Pete Hodgson wrote:
···
Hi folks,
I have a class definition as follows:
class Level
attr_reader :name, :rank
def initialize( name, rank )
@name, @rank = name, rank
end
TRACE = Comparable.new( :TRACE, 1000 )
DEBUG = Comparable.new( :DEBUG, 2000 )
INFO = Comparable.new( :INFO, 3000 )
# etc
end
and I'd like to define the constants in a more ruby-esque way; something
like:
class Level
attr_reader :name, :rank
def initialize( name, rank )
@name, @rank = name, rank
end
%w{TRACE DEBUG INFO CHANGE WARN ERROR FATAL}.each_with_index do |name,i|
clever_dynamic_hackery( name, Comparable.new( name.to_sym, i*1000 ) )
end
end
but I don't know what that clever_dyanamic_hackery method should
actually be. Any one want to show me the light?
Cheers,
Pete
there might be a method for specifically creating constants,but if not
you could always do something like this:
module_eval("#{name} = #{i*1000}", __FILE__, __LINE__)
···
On Fri, Sep 5, 2008 at 4:44 PM, Pete Hodgson <phodgson@lyris.com> wrote:
Apologies, s/Comparable/Level/ in the example code.
Pete Hodgson wrote:
Hi folks,
I have a class definition as follows:
class Level
attr_reader :name, :rank
def initialize( name, rank )
@name, @rank = name, rank
end
TRACE = Comparable.new( :TRACE, 1000 )
DEBUG = Comparable.new( :DEBUG, 2000 )
INFO = Comparable.new( :INFO, 3000 )
# etc
end
and I'd like to define the constants in a more ruby-esque way; something
like:
class Level
attr_reader :name, :rank
def initialize( name, rank )
@name, @rank = name, rank
end
%w{TRACE DEBUG INFO CHANGE WARN ERROR FATAL}.each_with_index do
>name,i|
clever_dynamic_hackery( name, Comparable.new( name.to_sym, i*1000 ) )
end
end
but I don't know what that clever_dyanamic_hackery method should
actually be. Any one want to show me the light?
Cheers,
Pete
module M
%w(FOO BAR BAZ).each do |c|
const_set(c, 1)
end
end
Wonderful, thank you Xavier!
Xavier Noria wrote:
···
module M
%w(FOO BAR BAZ).each do |c|
const_set(c, 1)
end
end