P
Patrick Li
Hi,
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
methods)
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
anymore).
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
-Patrick
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
features.
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
methods)
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
anymore).
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
-Patrick
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
features.