builtins/enumerator/stepping_parens.rb
tests/_examples/builtins/enumerator/stepping_parens.rb in the metorex repository.
# An Enumerator steps through the values a method yields, one at a time.
class Steps
def each
yield "a"
yield "b"
end
def upto(limit)
count = 1
while count <= limit
yield count
count = count + 1
end
end
def pairs
yield 1, 2
yield 3, 4
end
end
steps = Steps.new
letters = steps.to_enum
puts(letters.to_a.inspect)
puts(letters.next)
puts(letters.next)
begin
letters.next()
rescue StopIteration => error
puts(error.message)
end
puts(letters.rewind.peek)
puts(steps.enum_for(:upto, 3).to_a.inspect)
puts(steps.to_enum(:pairs).to_a.inspect)
collected = []
steps.to_enum(:each).each { |value| collected.push(value) }
puts(collected.inspect)
object = Object.new
one = object.then
puts(one.class.to_s)
puts(one.size.to_s)
puts(one.first.equal?(object).to_s)
puts(object.yield_self.peek.equal?(object).to_s)
puts(object.is_a?(Enumerable).to_s)
puts(one.is_a?(Enumerable).to_s)
Output:
["a", "b"]
a
b
iteration reached an end
a
[1, 2, 3]
[[1, 2], [3, 4]]
["a", "b"]
Enumerator
1
true
true
false
true