2009-10-21 16 views
10

Ist es möglich, eine lambda, proc, method oder andere Art von Block in Ruby, um einen anderen Block zu liefern?
so etwas wie ...Ruby: Ausbeute Block von einem Block?

a = lambda { 
    puts 'in a' 
    yield if block_given? 
} 

a.call { puts "in a's block" } 

dies nicht funktioniert ... es produziert nur

in a 
=> nil 

Gibt es Möglichkeit, den Block rufen Sie einen Block zu bekommen?

Antwort

8

Ich bin mir nicht sicher, ob Sie können Sie das tun können, aber etwas Ähnliches wäre:

In Ruby 1.8.6:

a = lambda { |my_proc| 
    puts 'in a' 
    my_proc.call 
} 

a.call(lambda { puts "in a's block" }) 

In Ruby 1.9.1, können Sie blockieren haben Parameter

a = lambda { |&block| 
    puts 'in a' 
    block.call 
} 

a.call { puts "in a's block" } 
8

Sie können den Block aufrufen, der dem Nachgeben ähnelt.

a = lambda {|&block| block.call if block} 
a.call {print "hello"} 

Beachten Sie, dass

a.call 

Wird nicht einen Fehler zurück.

+0

Nicht, dass es eine große Sache ist, aber ich bemerkte, dass Sie die ersten waren, die antworteten. –

Verwandte Themen