Hey ernest, I haven't got any experience with GCD but wouldn't it make more sense if block arguments were received as parameters to the block? This would make the variables block-local.
Dispatch::Queue.new("i").sync { |i| # block local 'i' } Remember blocks in Ruby are closures, too. Rob ---- http://robgleeson.github.com Website http://github.com/robgleeson GitHub r...@flowof.info E-Mail On 15 Jul 2010, at 21:47, MacRuby wrote: > #795: GCD inconsistently copies local variables inside blocks > ----------------------------------------+----------------------------------- > Reporter: ernest.prabha...@… | Owner: lsansone...@… > Type: defect | Status: new > Priority: critical | Milestone: > Component: MacRuby | Keywords: > ----------------------------------------+----------------------------------- > The expectation is that Ruby blocks will have their local variables copied > before being passed to GCD, to avoid errors from accessing them after they > are destroyed. > > However, that does not seem to always happen. For example: > > $ macruby -e 'i=0; Dispatch::Queue.new("i").sync {i = 42}; puts i' > > returns '0' as expected. However, this does not: > > $ macirb > irb(main):001:0> i=0; Dispatch::Queue.new("i").sync {i = 42}; puts i > 42 > => nil > > It appears to be copied properly in the block_spec.rb test: > > it "should create const copies of dynamic (local) variables" do > i = 42 > @q.sync {i = 1} > i.should == 42 > end > > But not in the README.rdoc for the dispatch module (aka > dispatch_methods.rb sample): > > n = 0 > job = Dispatch::Job.new { n = 21 } > job.join > puts "n (after): #{n} => 0?!?" # [returns 21, not 0] > > Any suggestions? > > -- > Ticket URL: <http://www.macruby.org/trac/ticket/795> > MacRuby <http://macruby.org/> > > _______________________________________________ > 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