If `main` is an instance of `Object`, why can't I call it?

前端 未结 3 927
鱼传尺愫
鱼传尺愫 2020-12-17 00:11

When I type self, I get a return value main. I made this test:

main2 = Object.new

Then I can call main2

相关标签:
3条回答
  • 2020-12-17 00:52

    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.

    0 讨论(0)
  • 2020-12-17 01:06

    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.

    0 讨论(0)
  • 2020-12-17 01:14

    "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').

    0 讨论(0)
提交回复
热议问题