2009-03-05 2 views

답변

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

또는 인수

b.call 

:

def call_block_name 
    yield "Dave" 
    yield "Mary" 
    end 

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

b.call("sam") 
3

사용 Proc.new는, 예를 들어, 블록을 캡처

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" 
} 

는 생산 :

proc1 
proc1 
proc2 
block 

는 일부 인수를 원하십니까?

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('/')}" 
} 

는 생산 :

proc1 with 1, 2, 3 
proc1 with 1, 2, 3 
proc2 only needs 1 
block with 4/5/6 
관련 문제