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