Can a Ruby method yield as an iterator or return an array depending on context?
arrays, iterator, methods, return-value, ruby
Solution
There is a syntax for that:
def arbitrary(&block)
values = [1, 2, 3, 4]
if block
values.each do |v|
yield v
end
else
values
end
end
Note:
yield v
Can be replaced with:
block.call v
Problem
I have an arbitrary method in Ruby that yields multiple values so it can be handed to a block: ``` def arbitrary yield 1 yield 2 yield 3 yield 4 end arbitrary { |x| puts x } ``` I'd like to modify this method so that, if there is no block, it just returns the values as an array. So this construct would work as well: ``` myarray = arbitrary p a -----> [1, 2, 3, 4, 5] ``` Is this possible in Ruby?