Ruby 如果'main'是'Object'的实例,为什么我不能调用它?
当我键入self时,我得到一个返回值main。我做了这个测试:Ruby 如果'main'是'Object'的实例,为什么我不能调用它?,ruby,Ruby,当我键入self时,我得到一个返回值main。我做了这个测试: main2 = Object.new 然后我可以调用main2,它会返回一些东西,但是当我调用main时,它会引发一个未定义的变量错误。这是怎么发生的 以下是我在其他网站上找到的关于顶级环境如何工作的假设: class Object Object.new.instance_eval do def self.to_s "main" end private ##
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
这对我来说很有意义。你不能用类似的东西直接引用主对象
myvar = main
不可能用它的名字来指代它。但是,您可以将其捕获到名为main的变量中,如下所示
main = self
puts main # => main
是Ruby的发明家自己提供的关于主对象的有用背景信息。在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。是一篇关于Ruby顶层的文章,解释了您需要知道的一切
另外,如果您将self.inspect更改为return foo(例如,self将返回foo),则self将返回foo您提供了一篇多么棒的文章,现在完全有意义了,通过我学习的include Module.new,这让我大开眼界!再次感谢!顺便说一句,从main的singleton类中删除to_s是说明整个结构的好方法!伟大的现在我现在main只是它的singleton类的to_方法的一个返回值,我可以将它传递给一个变量的方法是,从它的singleton类中删除to_,然后自返回真实的实例,然后我可以传递它,这是我从@banister的文章中学到的,谢谢你们