gpt4 book ai didi

ruby - 退出内核#loop

转载 作者:数据小太阳 更新时间:2023-10-29 08:37:27 24 4
gpt4 key购买 nike

Kernel#loop documentation ,有一个使用 break 来跳出循环的例子。否则,文档会讨论引发 StopIteration 错误。

我都试过了:

i=0
loop do
puts i
i+=1
break if i==10
end

i=0
loop do
puts i
i+=1
raise StopIteration if i==10
end

输出是一样的。这两种方法之间有区别吗?我认为应该有,否则何必定义一个错误类以及随之而来的所有管理呢?

最佳答案

break 是 ruby​​ 中的关键字,它终止最内部的循环,无论是 loop,还是 for,等等(参见 here)。

StopIteration 是一个异常,被 Kernel.loop 捕获(参见 here )。

因此在您的场景中,它们是相同的,但在不同的场景中,它们的行为会有所不同:

puts "first run"
for i in 0..20 do
puts i
break if i==10
end
puts "first done"

puts "second run"
for i in 0..20 do
puts i
raise StopIteration if i==10
end
puts "second done" # <= will not be printed

这是一个场景,当 break 不能时,可以使用 StopIteration:

puts "first run"

def first_run(i) # will not compile
puts i
break if i==10
end

i=0
loop do
first_run(i)
i+=1
end

puts "first done"

puts "second run"
def second_run(i)
puts i
raise StopIteration if i==10
end

i=0
loop do
second_run(i)
i+=1
end

puts "second done"

这是另一个用例,它使用了 Enumerator.next 的事实当枚举器到达末尾时抛出 StopIteration 错误:

enum = 5.times.to_enum
loop do
p enum.next
end

将打印

0
1
2
3
4

谢谢 Cary对于这个例子。

关于ruby - 退出内核#loop,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27768641/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com