Mathias Meyer
Mathias Meyer

Tags

I ran across a weird bug the other day that seems to have been fixed in Ruby 1.8.5. It’s nonetheless quite an interesting one. When you use a hash as a method parameter, and that hash happens to contain the key :do and you call the method without parentheses, like so:

def my_method(opts)
end

method :do => "commit"

It works when you put parentheses around the parameter:

method(:do => "commit")

Putting it in front of other entries doesn’t work though. Ruby seems to think I want to start a block where it’s not allowed. Putting the do into a string works just fine, of course.

Funny stuff. No mention in the Ruby changelogs, but it does work in later versions.