I’m still really confused about Ruby Closures.
At first I thought closures are just blocks who “remember” the context
that they were defined in (so that they can refer to local variables and
And then I discovered instance_eval (which changes the context that a
block is evaluated in).
When you use instance_eval you can’t call local methods anymore
(because, the scope has changed, and those methods aren’t local
But how come I can still use local variables?
myStr = "myString" o = Object.new o.instance_eval do @str = myStr # <- why does this still work? def method puts @str end end
So are local variables sort of an exception to instance_eval? And in the
above example, how come it won’t work anymore if I change myStr into an
instance variable @myStr?
Thanks a lot for helping
PS: Is there a detailed document I can read about OO languages? I come
from Java and I’m feeling a little lost amidst all these advanced OO