2013-06-06 3 views
4

기능이있어서 항목이 거의 없습니다. 나는 루프 반복 - 항목이 생성되지 않았는지 확인하십시오.

my_function() do |item| 
    ... some code here ... 
end 

반복자는 모든 항목을 반환하지 않는 경우 확인하는 멋진 방법이 있나요

를 사용하여 반복하고있어? 뭔가가 :

my_function() do |item| 
    ... some code here ... 
else 
    puts "No items found" 
end 
+0

가능한 중복 : ([루비 가장 좋은 방법은 각각 하나의 연산자에 다른 할 버리지 경우] http://stackoverflow.com/questions/16860310/ruby-best-practice-if-not-empty-each -do-else-in-one-operator) – sawa

+3

@sawa이 질문은 Haml 내에서 어떤 작업을 수행 할 수없는 작업을 수행하는 데 상당히 심심합니다. – Phrogz

답변

5

일반적으로 반복되는 함수는 반복 된 열거 형 (예 : 배열)을 반환합니다.

items = my_function() do |item| 
    # … 
end 
puts "Nothing found!" if items.empty? 

경우 :

물론
if my_function(){ |item| … }.empty? 
    puts "nothing found!" 
end 

, 당신의 블록이 여러 줄에있는 경우가 더 의미가 있습니다로이 쓸 :이 작업을 수행 할 경우,이 반환 값이 비어있는 경우, 당신은 테스트 할 수 있습니다 당신이 반복하는 열거 형을 생성하는 것이 쉽지 않거나 효율 적이 지 않다면, 당신이 단순히 반복 할 것인지를 나타내는 마지막 부울을 반환하도록 함수를 수정해야합니다.

+0

이것이 올바른 방법입니다. 그리고 그것은 [이 질문에 대한] 내 대답과 같습니다 (http://stackoverflow.com/questions/16860310). 왜이 답변은 세 upvotes (나 하나를 포함)있어 반면 나는 두 downvotes있어 궁금해. – sawa

2

반복에 대한 반환 값을 변수에 할당 한 다음 다른 값과 비교할 수 있습니다.

result = myfunction() do |item| 
    # some code here ... 
end 
if result.empty? 
    puts "Something" 
end 
관련 문제