Skip to content

Comment on Ruby's not readyparent

Comments

Your "bug" is lexical scoping?

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

AboutSource Built by g1lg1l

Hackerly is an independent reader for Hacker News, built on the public HN API. Not affiliated with Y Combinator.