When I type self
, I get a return value main
. I made this test:
main2 = Object.new
Then I can call main2
The evaluation of the expression self
in irb does return an object that prints as main. Here is a transcript that should help:
$ irb
>> self
=> main
>> main
NameError: undefined local variable or method `main' for main:Object
from (irb):2
>> self.inspect
=> "main"
>> self.class
>> Object
When you type main
into irb, it tries to evaluate the variable main
which is not declared.
You can't refer to the main
object directly with something like
myvar = main
It's not possible to refer to it by its "name". However, you can capture it in a variable named main like this
main = self
puts main # => main
"top-level object? top-level methods?" is useful background information on the main object by Ruby's inventor himself.
"What is the Ruby Top-Level?" is an article on the Ruby top level that explains everything you need to know.
As an aside however, you can access main
anywhere in your program by using TOPLEVEL_BINDING.eval('self')
.