define_method не использует переменные до вызова метода?

У меня проблемы с получением переменной из цикла for. Кажется, что i (var) вычисляется позже, а не определение класса, которое мне полностью требуется.

ree-1.8.7-2010.02 > class Pat
ree-1.8.7-2010.02 ?>  for i in 39..47
ree-1.8.7-2010.02 ?>    define_method("a#{i}".to_sym) do
ree-1.8.7-2010.02 >         puts i 
ree-1.8.7-2010.02 ?>      end
ree-1.8.7-2010.02 ?>    end
ree-1.8.7-2010.02 ?>  end
#=> 39..47 

ree-1.8.7-2010.02 > p = Pat.new
#=> #<Pat:0x103c31140> 

ree-1.8.7-2010.02 > p.a39
47
#=> nil 

ree-1.8.7-2010.02 > p.a49
NoMethodError: undefined method `a49' for #<Pat:0x103c31140>
    from (irb):69
    from :0
ree-1.8.7-2010.02 > p.a40
47
#=> nil 

Следует ли мне использовать def? если да, то как мне получить имена динамических методов, которых я достиг здесь с помощью def.

5
задан Phrogz 5 April 2011 в 16:30
поделиться