The Ruby Top-Level Object: Main
Hey guys. My blog has become pretty lonely, so I want to try coming up with some smaller, less-refined posts. I hope you don’t mind.
One of the few things I still forget in Ruby is how the toplevel
global instance works and how it relates to main
, Object
instances, and kernel. For some reason I always think that the
toplevel object is called kernel
, which it isn’t.
The toplevel object is the context code that is run by default in
Ruby. This toplevel object is referenced by self
, and is called
‘main’:
bash-3.2$ ruby -e 'puts self'
main
This ‘main’ object is of class Object
:
bash-3.2$ ruby -e 'puts self.class'
Object
I thought it was intersting that this ‘main’ object returns the string ‘main’; most instance of objects don’t look like that:
bash-3.2$ ruby -e 'puts self.class.new'
#<Object:0x007f94e3835ae8>
bash-3.2$ ruby -e 'puts Object.new'
#<Object:0x007fc2f4035b60>
I wonder if there are any singleton methods on this metaclass that explains this different behavior?
bash-3.2$ ruby -e 'puts self.singleton_methods'
to_s
public
private
include
Cool! Problem figured out.