2009-10-21 19 views
10

Başka bir bloğa ulaşmak için lambda, proc, method veya Ruby'de başka bir blok türü için kullanılabilir mi?
gibi bir şey ...Ruby: bir bloktan verim bloğu mu?

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

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

Bu işe yaramazsa ... sadece

in a 
=> nil 

bir blok çağırmak için blok almak için bir yolu var mı üretir?

cevap

8

sen bunu yapabilir miyim emin değilim, ama benzer bir şey olurdu:

Ruby 1.8.6 yılında

:

Ruby 1.9.1 yılında
a = lambda { |my_proc| 
    puts 'in a' 
    my_proc.call 
} 

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

, sen bloğu olabilir Parametreler

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

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

Verme işlemine benzer olan bloğu çağırabilirsiniz.

a.call 

bir hata döndürmez olduğunu

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

Not.

+0

Bu büyük bir sorun değil, ama ilk cevaplayan siz olduğunuzu farkettim. –