开发者

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

开发者 https://www.devze.com 2023-03-18 08:36 出处:网络
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 d

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_ev开发者_开发技巧al do  
    def self.to_s  
      "main"  
    end  
   private  
    ##  
    # Your program gets inserted here...  
    ##  

  end  
end 

It makes sense to me.


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


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.

0

精彩评论

暂无评论...
验证码 换一张
取 消