I think you’re thinking about an unrelated change in 1.9, which is this:

% ruby -e 'x = 42; lambda { |x| x = 21 }.call(x); p x'
21
% ruby19 -e 'x = 42; lambda { |x| x = 21 }.call(x); p x'
42

In your example ‘theProjectRoot’ is not a parameter to the block, that's ‘f’. 
It could have been a local variable (or method) outside of the block, but that 
isn't so either, the one variable you defined that comes close is the instance 
variable named ‘@theProjectRoot’.

I hope this explains it better. If not feel free to ask more :)

On Jan 27, 2011, at 2:26 PM, Martin Hawkins wrote:

> Yes - a 1.9 change; 'parameters to a block are now always local to a
> block' - I'll probably forget again before it sticks.
> 
> On Jan 27, 9:44 am, Eloy Durán <eloy.de.en...@gmail.com> wrote:
>> The problem you are seeing is because inside the #map block you don't 
>> reference the project root variable as an instance variable, but as a local 
>> variable. Hence the error “undefined local variable or method 
>> `theProjectRoot'” :)
>> 
>> If you change the block like this, all should be good:
>> 
>>     map {|f| @theProjectRoot.stringByAppendingPathComponent(f) }
>> 
>> On Jan 27, 2011, at 10:18 AM, Martin Hawkins wrote:
>> 
>> 
>> 
>> 
>> 
>>> I find the following behaviour a little bizarre:
>>> At the macirb prompt (0.8)
>>> fileManager = NSFileManager.defaultManager
>>> @theProjectRoot = '/Users/martin/work/macruby/lots_of_files'
>>> => "/Users/martin/work/macruby/lots_of_files"
>>>>> filenames = fileManager.contentsOfDirectoryAtPath(@theProjectRoot, 
>>>>> error:nil).map {|f| theProjectRoot.stringByAppendingPathComponent(f) }
>>> NameError: undefined local variable or method `theProjectRoot' for
>>> main:TopLevel
>> 
>>> If I create a local variable with the name theProjectRoot, then the
>>> statement runs correctly. According to the documentation,
>>> NSFileManager.defaultManager.contentsOfDirectoryAtPath requires a
>>> string; the scope of the variable should be irrelevant, shouldn't it?
>> 
>>> _______________________________________________
>>> MacRuby-devel mailing list
>>> macruby-de...@lists.macosforge.org
>>> http://lists.macosforge.org/mailman/listinfo.cgi/macruby-devel
>> 
>> _______________________________________________
>> MacRuby-devel mailing list
>> MacRuby-de...@lists.macosforge.orghttp://lists.macosforge.org/mailman/listinfo.cgi/macruby-devel
> _______________________________________________
> MacRuby-devel mailing list
> MacRuby-devel@lists.macosforge.org
> http://lists.macosforge.org/mailman/listinfo.cgi/macruby-devel

_______________________________________________
MacRuby-devel mailing list
MacRuby-devel@lists.macosforge.org
http://lists.macosforge.org/mailman/listinfo.cgi/macruby-devel

Reply via email to