2010-03-17 6 views
30

코드 블록을 사용하는 메소드가 있습니다.Ruby에서 여러 코드 블록을 인수로 전달

opportunity { @some_array.empty? }

을하지만 수율을 사용할 수 있도록 어떻게 이런 식으로 두 번 뭔가를 하나 개 이상의 코드 블록을 전달할 않습니다 :

def opportunity 
    @opportunities += 1 
    if yield 
    @performances +=1 
    end 
end 

와 나는 같이 호출

def opportunity 
    if yield_1 
    @opportunities += 1 
    end 
    if yield_2 
    @performances +=1 
    end 
end 

및 :

opportunity {@some_other_array.empty?} { @some_array.empty? } 

이 예제는 수율없이 수행 할 수 있다는 것을 알고 있습니다 만 설명하기위한 것입니다.

답변

52

당신은 그 자체로 여러 블록을 전달할 수 없지만, 여러 프록 또는 람다 전달할 수 있습니다 1.9 구문을 사용하여

:

def opportunity(lambda1, lambda2) 
    if lambda1.() 
    @opportunities += 1 
    end 
    if lambda2.() 
    @performances += 1 
    end 
end 
:

opportunity ->{ @some_array.empty? }, ->{ @some_other_array.empty? } 

및 방법 자체

+0

그 함수를 선언하는 다른 방법은 – user5020

+1

Proc.new {} 또는 lambda {}도 작동합니다. 'call '에 응답하는 모든 객체가 작동합니다. – Kylee

+0

'.()'메소드는'.call'의 별칭입니까? – MrYoshiji

관련 문제