[lnkForumImage]
TotalShareware - Download Free Software

Confronta i prezzi di migliaia di prodotti.
Asp Forum
 Home | Login | Register | Search 


 

Forums >

comp.lang.ruby

dynamically assigning class constants

Pete Hodgson

9/5/2008 11:37:00 PM

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

4 Answers

Pete Hodgson

9/5/2008 11:44:00 PM

0

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
>
>

Pleos

9/6/2008 1:13:00 AM

0

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
>>
>>
>
>

Xavier Noria

9/6/2008 1:22:00 AM

0

module M
%w(FOO BAR BAZ).each do |c|
const_set(c, 1)
end
end

Pete Hodgson

9/6/2008 1:31:00 AM

0

Wonderful, thank you Xavier!

Xavier Noria wrote:
> module M
> %w(FOO BAR BAZ).each do |c|
> const_set(c, 1)
> end
> end
>
>