2009-10-21 16 views
10

¿Es posible para un lambda, proc, method u otro tipo de bloque en rubí, para ceder el paso a otro bloque?
algo así como ...Ruby: bloque de rendimiento de un bloque?

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

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

esto no funciona ... sólo produce

in a 
=> nil 

¿Hay manera de conseguir el bloque para llamar a un bloque?

Respuesta

8

no estoy seguro de si se puede se puede hacer eso, pero algo similar sería:

en Ruby 1.8.6:

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

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

en Ruby 1.9.1, puede hacer que el bloque parámetros

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

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

Puede llamar al bloque, que es similar a yielding.

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

Tenga en cuenta que

a.call 

no devolverá un error.

+0

No es que sea un gran problema, pero noté que usted fue el primero en responder. –

Cuestiones relacionadas