如果`main`是`Object`的实例,为什么我不能调用它?

时间:2011-07-10 04:20:09

标签: ruby

当我输入self时,我得到一个返回值main。我做了这个测试:

main2 = Object.new

然后我可以调用main2,它返回一些东西,但是当我调用main时,它会引发一个未定义的变量错误。这是怎么发生的?

以下是我在其他网站上发现的关于顶级环境如何运作的假设:

class Object  
  Object.new.instance_eval do  
    def self.to_s  
      "main"  
    end  
   private  
    ##  
    # Your program gets inserted here...  
    ##  

  end  
end 

对我来说很有意义。

3 个答案:

答案 0 :(得分:14)

What is the Ruby Top-Level?”是Ruby顶级文章,解释了您需要了解的所有内容。

但是,您可以使用main在程序中的任何位置访问TOPLEVEL_BINDING.eval('self')

答案 1 :(得分:4)

irb中表达式self的评估确实会返回打印作为主要对象的对象。这是一个应该有用的成绩单:

$ irb
>> self
=> main
>> main
NameError: undefined local variable or method `main' for main:Object
        from (irb):2
>> self.inspect
=> "main"
>> self.class
>> Object

当您在irb中键入main时,它会尝试评估未声明的变量main

答案 2 :(得分:1)

您无法直接使用

之类的内容引用main对象
myvar = main

不可能通过“名称”来引用它。但是,您可以在名为main的变量中捕获它,如此

main = self
puts main # => main

top-level object? top-level methods?”是Ruby发明者自己对主要对象的有用背景信息。