[ruby] 블록에서 일찍 무언가를 반환하려면 어떻게해야합니까?

다음과 같이하고 싶다면 :

collection.each do |i|
   return nil if i == 3

   ..many lines of code here..
end

그 효과를 어떻게 얻을 수 있습니까? 큰 if 문으로 블록 내부의 모든 것을 래핑 할 수 있다는 것을 알고 있지만 가능하면 중첩을 피하고 싶습니다.

나머지 요소의 반복을 중지하고 싶지 않기 때문에 Break는 여기서 작동하지 않습니다 .



답변

next블록 내부는 블록에서 반환됩니다. break블록 내부는 블록에 양보 한 함수에서 반환됩니다. 대한 each이 수단 break루프를 종료하고 next루프 (따라서 이름)의 다음 반복으로 이동합니다. next value및 로 값을 반환 할 수 있습니다 break value.


답변

#!/usr/bin/ruby

collection = [1, 2, 3, 4, 5 ]

stopped_at = collection.each do |i|
   break i if i == 3

   puts "Processed #{i}"
end

puts "Stopped at and did not process #{stopped_at}"


답변

이 경우 break를 사용하여 루프를 일찍 종료 할 수 있습니다.

collection.each do |i|
  break if i == 3
  ...many lines
end

… 물론, 이것은 당신이 실제로 값을 반환하려고하는 것이 아니라 단지 블록을 벗어나는 것을 가정하는 것입니다.


답변