불행히도 루비는 조금 다릅니다. 추신 : 내 기억은 조금 흐릿합니다. 내가 잘못하면 사과합니다.
break / continue 대신 break / next가 있으며 루프 측면에서 동일하게 작동합니다.
루프는 다른 모든 것과 마찬가지로 표현식이며 마지막으로 수행 한 것을 "반환"합니다. 대부분의 경우 루프에서 반환 값을 얻는 것은 의미가 없으므로 모든 사람 이이 작업을 수행합니다.
a = 5
while a < 10
a + 1
end
그러나 당신은 이것을 할 수 있습니다
a = 5
b = while a < 10
a + 1
end # b is now 10
그러나 많은 루비 코드는 블록을 사용하여 루프를 '에뮬레이트'합니다. 정식 예는
10.times do |x|
puts x
end
사람들이 블록의 결과로 일을하고 싶어하는 것이 훨씬 흔하기 때문에 여기가 지저분 해집니다. break / next는 블록의 맥락에서 다른 것을 의미합니다.
차단은 블록을 호출 한 코드에서 뛰어납니다
다음은 블록의 나머지 코드를 건너 뛰고 블록의 호출자에게 지정한 것을 '반환'합니다. 예가 없으면 의미가 없습니다.
def timesten
10.times{ |t| puts yield t }
end
timesten do |x|
x * 2
end
# will print
2
4
6
8 ... and so on
timesten do |x|
break
x * 2
end
# won't print anything. The break jumps out of the timesten function entirely, and the call to `puts` inside it gets skipped
timesten do |x|
break 5
x * 2
end
# This is the same as above. it's "returning" 5, but nobody is catching it. If you did a = timesten... then a would get assigned to 5
timesten do |x|
next 5
x * 2
end
# this would print
5
5
5 ... and so on, because 'next 5' skips the 'x * 2' and 'returns' 5.
그래 루비는 훌륭하지만 끔찍한 코너 케이스가 있습니다. 이것은 내가 그것을 사용하는 내 년에 본 두 번째 최악입니다 :-)