我正在尝试使用 Ruby 1.9 掌握对枚举器的惰性求值。这是正在进行的工作,因此可能会有其他错误/缺少代码,但我现在有一个具体问题。我正在尝试通过此测试(注意我无法更改测试):
def test_enumerating_with_a_single_enumerator
enumerator = SomeClass.new(some_infinite_sequence.to_enum)
assert_equal [1, 2, 3, 4, 5], enumerator.take(5)
end
我在下面编写了这段代码,我知道问题是我正在从作为 Enumerator 类的实例的初始化方法的参数上调用 SomeClass 中的lazy_select实例方法,所以我得到了 NoMethodError。有什么建议么?谢谢你。
class SomeClass < Enumerator
def initialize(*enumerators)
super() do |yielder|
enumerators.each do |enumerator|
enumerator.lazy_select { |yielder, first_value, second_value| yielder.yield first_value if (first_value <=> second_value) <= 0 }
.first(20)
end
end
end
def lazy_select(&block)
self.class.new do |yielder|
each_cons(2) do |first_value, second_value|
block.call(yielder, first_value, second_value)
end
end
end
end