B.2 Curly braces around hash arguments
Consider a hypothetical method that accepts a Hash as its last argument:
"first_argument", 2, { :this => "argument", :is => "a Hash" }) some_method(
How many arguments does the above method have? You might be tempted to say four or even six if you just count, but really it’s three: a string is first, an integer is second, and the entire hash ({ :this => "argument", :is => "a Hash" }
) is the third and final argument.
In the case that a Hash literal is being used as the last argument to a method, you can optionally drop the curly braces around it:
"first_argument", 2, :this => "argument", :is => "a Hash") some_method(
Now it really looks like the method is taking more than three arguments, but it’s not; Ruby can figure out from the hash rockets that the stuff at the end is really just one Hash.
Note that you can only drop the curly braces around a Hash in this one, very specific case — if the Hash is the last argument to a method. So this:
# Creating a Hash literal and storing it in a variable:
:fruit => "banana", :sport => "hockey" } my_hash = {
is not the same as this:
# The below is nonsensical, as far as Ruby is concerned:
:fruit => "banana", :sport => "hockey"
my_hash =
# You can't drop the curly braces around the Hash unless it is the last argument to a method.