【发布时间】:2020-05-11 03:13:44
【问题描述】:
我花了很长时间调试我的代码,试图找出为什么我的简单脚本没有错误消息/警告而挂起。
我正在循环遍历枚举器并根据该循环中的值执行特定任务。
下面的例子只是为了演示我是如何得出这个错误的(我知道这可以用更好的方式编码)
marketplaces = ["ebay","amazon","shopify"].cycle.each
complete = false
while(!complete)
marketplace = marketplaces.next
if marketplace == "ebay"
// do abc
completed = 1
elsif marketplace == "amazon"
// do def
completed += 1
elsif marketplace == "shopify"
// do xyz
completed += 1
end
// indefinetely hangs here
if marketplaces.count == completed
complete = true
end
end
我的问题:
我现在明白了您不能在 Ruby 中对 Enumerator 类型调用 .count,但为什么它只是挂起,幕后发生了什么?
要重现,只需创建任何数组并将其转换为枚举器并在该对象上调用计数:
谢谢
【问题讨论】:
-
您可以在
Enumerator上致电count,Enumerators 是Enumerables,因此您可以计算它们。但是,你不能数到无穷大。 -
你在数无限
Enumerator的元素个数。你预计会发生什么?