Reputation: 6992
So I've got a Ruby method like this:
def something(variable, &block)
....
end
And I want to call it like this:
something 'hello' { do_it }
Except that isn't working for me, I'm getting a syntax error. If I do this instead, it works:
something 'hello' do
do_it
end
Except there I'm kind of missing the nice look of it being on one line.
I can see why this is happening, as it could look like it's a hash being passed as a second variable, but without a comma in between the variables...but I assume that there must be a way to deal with this that I'm missing. Is there?
Upvotes: 33
Views: 15283
Reputation: 107738
Uh, what about:
>> def something(arg1 , &block)
>> yield block
>> end
=> nil
>> def do_it
>> puts "Doing it!"
>> end
=> nil
>> something('hello') { do_it }
"Doing it!"
=> nil
Upvotes: 0
Reputation: 10367
You need to parenthesize your argument:
something('hello') { do_it }
That should work.
Upvotes: 51
Reputation: 1621
If you want "def something" to to accept a block, you need to yield data to that block. For example:
#to uppercase string
def something(my_input)
yield my_input.upcase
end
# => "HELLO WORLD"
something("hello world") { |i| puts i}
Upvotes: 2