当我输入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
对我来说很有意义。
答案 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发明者自己对主要对象的有用背景信息。