3 ms·
No, it's lack of consistent lexical scoping. Either ruby blocks create a new scope or they do not. Which is it?
by akkartik 19y ago
No, it's lack of consistent lexical scoping.
Either ruby blocks create a new scope or they do not. Which is it?
- tptacek 19y agoThey create new scopes, and close over the their enclosing environment. In other words, it supports both block-local variables and closures.
- akkartik 19y agoI don't understand. You mean there's a good reason for it to overwrite variables in outer scopes if they exist? Is there any way to specify if I want block-local or not? The way python deals with scopes is to provide read access to outer scopes if there are no writes to a variable.
- tptacek 19y agoOf course there is: if you couldn't access variables in the enclosing scopes, blocks would be drastically less useful. Ruby uses anonymous functions where Python would use a loop construct.
- akkartik 19y ago[We took this conversation offline. it seems this is a known gotcha (e.g. http://www.osix.net/modules/article/?id=401 http://www.osix.net/modules/article/?id=401), and may be changed in ruby 2.0 (http://groups.google.com/group/sbonrails/browse_thread/thread/cfcfdad71d8f786c http://groups.google.com/group/sbonrails/browse_thread/threa...). Thanks tptacek.]