I was wondering how Ruby handles this? I know it works, but *how*?
Ruby has different namespaces for methods and constants, so you can create both a constant "H" and a method "H". When parsing the expression
H H
Ruby notices that the first "H" is followed by a parameter, so Ruby chooses the *method* "H". The second "H" doesn't have a parameter, so Ruby chooses the *constant* "H".
BTW, you can also do the same with methods and local variables:
v = "v"
def v(a)
p a
end
v v # => "v"
Note also the following error messages:
x y # => undefined local variable or method `y'
and
y = 1
x y # => undefined method `x'
Here you see that "x" can only be a method, whereas "y" could be a local variable or a method.