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
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”
v v # => “v”
Note also the following error messages:
x y # => undefined local variable or method `y’
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.