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?
def arbitrary
  values = [1,2,3,4]
  return values unless block_given? 
  values.each { |val| yield(val) }
end
arbitrary { |x| puts x }
arbitrary
                        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
                        If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With