When I type self
, I get a return value main
. I made this test:
main2 = Object.new
Then I can call main2
, and it returns something, but when I call main
, it raises an undefined variable error. How does this happen?
Here's the assumption I found in other site about how this top level environment works:
class Object
Object.new.instance_eval do
def self.to_s
"main"
end
private
##
# Your program gets inserted here...
##
end
end
It makes sense to me.
You can't refer to the
main
object directly with something likeIt's not possible to refer to it by its "name". However, you can capture it in a variable named main like this
"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 usingTOPLEVEL_BINDING.eval('self')
.The evaluation of the expression
self
in irb does return an object that prints as main. Here is a transcript that should help:When you type
main
into irb, it tries to evaluate the variablemain
which is not declared.