Всем привет. Сижу, вот, разбираюсь в Ruby. Набрел на такой вот пример (ниже продублирую код)
#!/usr/bin/env ruby
# Return given number of even Integers
# that have number '4' within them
even_numbers = Enumerator.new do |yielder|
number = 0
count = 1
loop do
number += count
count += 1
yielder.yield number
end
end
class Enumerator
def infinite_selector(&block)
Enumerator.new do |yielder|
self.each do |value|
yielder.yield(value) if block.call(value)
end
end
end
end
p even_numbers
.infinite_selector {|val| val % 2 == 0}
.infinite_selector {|val| val.to_s =~ /4/}
.first(10)
В итоге получаю:
[406, 496, 946, 1540, 2346, 3240, 3486, 4186, 4278, 4560]
В свою очередь не пойму, почему пропускаются числа 4, 8, ... Почему сразу выводятся такие «большие» числа?