2009-03-05 17 views

cevap

6
b = lambda { puts "this is the block" } 
callBlock &b 

veya bağımsız değişkenler ile

b.call 

:

def call_block_name 
    yield "Dave" 
    yield "Mary" 
    end 

b = lambda { |s| puts "this is block #{s}" } 
call_block_names &b 

ve

b.call("sam") 
3

Kullanım Proc.new, örneğin bir blok yakalamak için

def callBlocks(*args, &block) 
    args.each { |arg| arg.call } 
    block.call if block_given? 
end 

my_proc1 = Proc.new { puts "proc1" } 
my_proc2 = Proc.new { puts "proc2" } 

callBlocks(my_proc1, my_proc1, my_proc2) { 
    puts "block" 
} 

üretir:

proc1 
proc1 
proc2 
block 

Yanında biraz argümanlar ister misiniz?

def callBlocks(*args, &block) 
    args.each { |arg| arg.call(1, 2, 3) } 
    block.call(4, 5, 6) if block_given? 
end 

my_proc1 = Proc.new { |a, b, c| puts "proc1 with #{a}, #{b}, #{c}" } 
my_proc2 = Proc.new { |a, *dummy| puts "proc2 only needs #{a}" } 

callBlocks(my_proc1, my_proc1, my_proc2) { |*abc| 
    puts "block with #{abc.join('/')}" 
} 

üretir:

proc1 with 1, 2, 3 
proc1 with 1, 2, 3 
proc2 only needs 1 
block with 4/5/6 
İlgili konular