Hacker Newsnew | past | comments | ask | show | jobs | submitlogin

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.]




Guidelines | FAQ | Lists | API | Security | Legal | Apply to YC | Contact

Search: