Delegate is left with a destroyed stack object

Chris Nicholson-Sauls ibisbasenji at gmail.com
Sat Nov 2 00:37:03 PDT 2013


On Thursday, 31 October 2013 at 20:56:11 UTC, Peter Alexander 
wrote:
> On Thursday, 31 October 2013 at 07:41:30 UTC, Jacob Carlborg 
> wrote:
>>
>> I use Ruby all day with a lot of blocks (closures) and I never 
>> had any problem. In Ruby everything is an object and passed 
>> around by reference. I guess that's help.
>>
>> BTW, the default iteration pattern in Ruby is to use blocks:
>>
>> [1, 2, 3].each { |e| puts e }
>>
>> Closest translation in D:
>>
>> [1, 2, 3].each!(e => writeln(e));
>>
>> But in D one would of course use a foreach loop instead.
>
> Those aren't closures, it captures none of the environment. 
> Those are just simple lambda functions.

Maybe this would be a better Ruby example?

##################################################
module App
     def self.run
         register_callbacks
         Other.call_all
     end

     def self.register_callbacks
         foo = 10
         Other.register { puts foo }

         Other.register { puts self }

         foo = 20
         Other.register { puts foo }

         foo = 30
     end
end

module Other
     @@callbacks = []

     def self.register (&blk)
         @@callbacks << blk
     end

     def self.call_all
         @@callbacks.each {|cb| cb.call }
     end
end

App.run if __FILE__ == $0
##################################################

Output is:
30
App
30

-- Chris NS


More information about the Digitalmars-d mailing list