2012-03-07 3 views
2

나는 매우 반복적 인 조건문을 가지고 있습니다. 나는 약간의 metaprogramming으로 정리할 수 있는지 궁금 해서요.루비 : 조건부 문장에서 메타 프로그래밍

이 내가 다루고있는 무슨의 간단한 예입니다 에있는 세 줄을 교체

FILTERS = [ 
    :filter1, 
    :filter2, 
    :filter3 
] 

def filter1; true; end 
def filter2; true; end 
def filter3; true; end 

if(
    send(FILTERS[0]) && 
    send(FILTERS[1]) && 
    send(FILTERS[2]) 
) 
    puts "DONE!" 
end 

(내 실제 경우에 FILTERS 배열 (27 개) 요소를 포함)

대상 어떤 종류의 에 문장으로 자동 반복을 통해 모든 필터 방법.

또 다른 중요한 경기는 && 명령의 밖으로 빠른 동작을 유지하는 것입니다 : 경우에 filter1falsefilter2 또는 filter3이 실행됩니다.

FILTERS 배열은 우아한 솔루션을 찾는 데 도움이되므로 사용하지 않아도됩니다.

+0

filtersX는 부울 값을 포함 당신은 왜, 해시 필터 = {필터 1을 : 사실, 필터 2를 : 거짓 : 사실, filter3}를 저장하지 않는 경우 해시 이상 및 itterate를? – lesce

+0

필터가 어떤 것을 반환하지 않아야합니까? (따라서 하나의 필터가 이전 필터의 출력에 작용합니다). 또는 부작용을 일으킴으로써 작동합니까? (레일즈의 'before_filters'처럼) – tokland

+0

여기에 표시된 필터 메소드 구현은 _simplified_ examples입니다. 실제 것들은 더 복잡합니다. 진짜 문제는 @Tass가 해결 된 것처럼'&&'행동을 유지하면서 결과를 반복하는 법입니다. – fguillen

답변