On Thu, 5 Oct 2006, ebeard wrote:

> I currently do this:
>
> [Kernel,String,Object].each do |klass|
> case klass.to_s
>  when 'Kernel' :
>    puts 'I\'m doing stuff with object Kernel'
>  when 'String' :
>    puts 'I\'m doing stuff with object String'
>  when 'Object' :
>    puts 'I\'m doing stuff with object Object'
>  end
> end
>
>
> Is there a better way?

well, the code you have above is exactly equivalent to this

   [Kernel, String, Object].each{|k| puts "I'm doing stuff with object #{ k }"}

but i suppose your real code is quite different?  my point is just that
looping over three things and selecting them each in turn is the same thing as
pre-selecting the items to loop over.  another alternative is

   actions = {
     Kernel => lambda{ puts "I\'m doing stuff with object Kernel"},
     String => lambda{ puts "I\'m doing stuff with object String"},
     Object => lambda{ puts "I\'m doing stuff with object Object"},
   }

   [Kernel, String, Object].each{|k| actions[k].call}

which works for some situations and can sometimes be even more general

   actions = lambda{|k| lambda{ puts "I'm doing stuff with object #{ k }"} }

   [Kernel, String, Object].each{|k| actions[k].call}


which is suited to compact arg dependant actions but not long ones.

regards.

-a
-- 
in order to be effective truth must penetrate like an arrow - and that is
likely to hurt. -- wei wu wei