Ruby yield as keyword args default
Today I learned that you can use yield
as a default value for a keyword arg.
def foo(bar: yield)
"Received => #{bar}"
end
Then you can call this method using the keyword syntax:
foo(bar: "Hello world!")
#=> "Received => Hello world!"
or by using the block syntax:
foo do
"Hello world!"
end
#=> "Received => Hello world!"
I am not sure why I'd use such flexible syntax for a single method, but we have to know what's possibly in Ruby. Anyway, just a sanity check here, is the block evaluated if we pass the arg?:
foo(bar: "Hello") do
puts "Block was evaluated!!!"
"world!"
end
#=> "Received => Hello"
Cool, so ruby does not evaluate the block if this keyword is passed into, so we are cool.
Tweet