2017-11-22 21 views
0

두 건의 해시가 있으며 if 조건의 결과를 기반으로 해시 중 하나를 반복해야합니다.Ruby each Iterator - if 조건을 기반으로 반복을 위해 해시를 대체 하시겠습니까?

if SOME CONDITION 
    hash_a.each do |x| 
    some code in here 
    end 
else 
    hash_b.each do |x| 
    the same code in here 
    end 

각 요소에 대해 실행되는 코드의 약 30 라인이있다, 그래서 제 질문은 다음과 같습니다 :

SOME CONDITION ? hash_a.each do |x| : hash_b.each do |x| 
    some code in here 
end 
: 더 같은 코드 모양의 무언가를 만들 수있는 방법이 아래에 내 코드는 현재 모습입니다

다른 방법으로 단순화/축소 할 수 있습니까?

미리 감사드립니다. SOME_CONDITION 오히려 간단 경우

+1

해시를 인수로 사용하여 메서드를 만드는 것이 좋습니다. 예를 들어,'def doit (hash); 여기 몇몇 코드; 끝 '. 그런 다음'doit (condition? hash_a : hash_b)'를 실행하십시오. 이것은 당신이하고있는 일을 분명히하고 테스트를 용이하게합니다. –

답변

2

당신은 직접 :,

(SOME_CONDITION ? hash_a : hash_b).each do |x| 
    # some code in here 
end 

을 예컨대을 삼항 연산자에 each를 호출하는 객체를 선택할 수 있습니다, 이것은 좋은 깨끗한 방법입니다. 조건이 더 복잡한 경우 조건 또는 전체 개체 선택을 각각 자체 메서드로 추출해야합니다.