"Gavin Sinclair" <gsinclair / soyabean.com.au> schrieb im Newsbeitrag 
news:193-2098986814.20041030113810 / soyabean.com.au...
> On Saturday, October 30, 2004, 11:29:20 AM, Pete wrote:
>
>> I haven't been able to find any documentation on the syntax for a
>> certain feature, and am not sure the feature exists.  What I would like
>> to do is add a block of code to a hash, so I could do something like 
>> this:
>
>>         state = 0
>>         states = {
>>                 0 => { puts "State 0"; state = 1 },
>>                 1 => { puts "State 1"; state = 0 }
>>         }
>
> It's pretty easy:
>
>  state = 0
>  states = {
>    0 => lambda { puts "State 0"; state = 1 },
>    ...
>  }
>
>  while a_condition
>    states[state].call
>  end

And you can even define default behavior:

state = 0
states = Hash.new( lambda { puts "fallback" } ).update(
  0 => lambda { puts "State 0"; state = 1 },
  1 => lambda { puts "State 1"; state = 0 }
)

loop do
  states[rand 100].call
end

or even (for individual fallbacks)

states = Hash.new { |h,k| h[k] = lambda { puts "fallback for #{k}" } } 
..update(
  0 => lambda { puts "State 0"; state = 1 },
  1 => lambda { puts "State 1"; state = 0 }
)

>> 10.times {|i| states[i].call }
State 0
State 1
fallback for 2
fallback for 3
fallback for 4
fallback for 5
fallback for 6
fallback for 7
fallback for 8
fallback for 9
=> 10

Kind regards

    robert