【发布时间】:2017-11-21 13:45:24
【问题描述】:
几天前我问了同样的问题,但不知何故没有发生沟通。我已经重新构建了我的问题,希望我们能够将我需要解决的问题归零。
问题基本上是这样的:如何创建一个不只是使用另一个可枚举的可枚举类?作为我需要做的一个简化但完全有效的示例,请考虑这个类:
class MyClass
include Enumerable
def get_next
return_val = rand.to_s
if return_val.match(/33/)
return nil
else
return return_val
end
end
def each
# ??????
end
end
在这个类中,get_next 计算一个随机值。然后,如果该值有两个相邻的 3,则该方法返回 nil。否则返回值。因此,您可以一遍又一遍地运行 get_next,通常不到十次:
myob = MyClass.new
while not myob.get_next.nil?
puts 'got one'
end
实际上,get_next 会搜索数千个数据点。当它找到下一个项目时,它会返回一个相当庞大的对象。 MyClass 对象不可能将所有项目都放入数组中。一次只需要一个。
事实上,我的班级按照上面的结构工作得很好。但是,我想以一种 rubyish 的方式来实现它。
因此,鉴于上述工人阶级,请填写空白。 each() 中的哪些内容可以使它成为一个可枚举的类?
【问题讨论】:
-
看一下
Enumerator.new的示例——调用take(10)只返回前10 个项目,尽管数字是在无限循环中产生的。值得一读:blog.arkency.com/2014/01/ruby-to-enum-for-enumerator
标签: ruby