Comment on Ruby's not readyparentComments−akkartik18yNo, it's lack of consistent lexical scoping.Either ruby blocks create a new scope or they do not. Which is it?−tptacek18yThey create new scopes, and close over the their enclosing environment. In other words, it supports both block-local variables and closures.−akkartik18yI 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.−tptacek18yOf 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.−akkartik18y[We took this conversation offline. it seems this is a known gotcha (e.g. http://www.osix.net/modules/article/?id=401), and may be changed in ruby 2.0 (http://groups.google.com/group/sbonrails/browse_thread/threa...). Thanks tptacek.]
Comments
No, it's lack of consistent lexical scoping.
Either ruby blocks create a new scope or they do not. Which is it?
They create new scopes, and close over the their enclosing environment. In other words, it supports both block-local variables and closures.
I 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.
Of 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.
[We took this conversation offline. it seems this is a known gotcha (e.g. http://www.osix.net/modules/article/?id=401), and may be changed in ruby 2.0 (http://groups.google.com/group/sbonrails/browse_thread/threa...). Thanks tptacek.]