I would like to understand how define_method
works and how to properly use the variables outside of the definition block. Here is my code:
class Test
def self.plugin
for i in 1..2
define_method("test#{i}".to_sym) do
p i
end
end
end
plugin
end
ob = Test.new
ob.test1 #=> 2 (I would expect 1)
ob.test2 #=> 2 (I would expect 2)
It seems that in the methods test1
and test2
, the value of i
is not substituted during the definition, but is computed directly on the spot when the method is called. So we see only the latest value of i
, which is 2
. But where does Ruby take this value from? And is there a way to let test#{i}
print i
?
In this particular case, I could do a workaround using __method__
, but probably there is a better solution.