In Ruby, all top level method calls happen on the main
object:
self
#=> main
main
is an object with the class Object
:
self.class
#=> Object
So at the top level, hash
calls the Object#hash
method on the main
object:
hash → fixnum
Generates a Fixnum hash value for this object. This function must have
the property that a.eql?(b)
implies a.hash == b.hash
.
The hash value is used along with eql? by the Hash class to determine
if two objects reference the same hash key. Any hash value that
exceeds the capacity of a Fixnum will be truncated before being used.
The hash value for an object may not be identical across invocations
or implementations of Ruby. If you need a stable identifier across
Ruby invocations and implementations you will need to generate one
with a custom method.
For more on the top-level in Ruby, see the blog post What is the Ruby Top-Level?.