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.