我真的不知道该怎么赋予这个权利。无论如何,我正在Ruby中进行一些元编程,并且在调试时遇到了对“ main:Object”的引用。
这让我开始思考,如果Ruby类从来没有完全关闭过,并且以后由于某种原因我可以重新打开它们,是否可以访问此“ main:Object”?如果这确实是一个对象,则应该像其他任何类/对象一样可能吗?如果不是,那为什么不呢?这是真正受保护的空间吗?无论哪种方式,我都想知道是否可以从Ruby中的任何位置访问它。如果是这样怎么办?如果不是,为什么呢?
除了口译员抱怨那里没有东西外,我还没有太多与此相关的参考文献或信息。我的意思是除此以外是顶级范围。但这不是我真正想知道的。
实际上没有太多东西了,下面的这些帖子都在谈论它是什么。
Is there a “main” method in Ruby like in C?
What is “main” in Ruby?
我知道这不能使您使用操作项,但我希望某些类似的专家可以在StackOverflow上分享他们的知识,我们可以共享一些新知识。
无论如何,先谢谢。如果这不是正确的论坛,请告诉我哪个。
答案 0 :(得分:1)
这是一个由irb
/ pry
的REPLs顶级实例(或 Ruby解释器)引入的实例,不包含任何其他声明。您可能会检查它的作用:
self
#⇒ main
self.class
#⇒ Object
self.__id__
#⇒ 47421128700280
当您键入def foo; 42; end
时,您实际上会扩展该对象。
答案 1 :(得分:0)
TOPLEVEL_BINDING
(definition) 是你的朋友:
def m1
class << TOPLEVEL_BINDING.eval('self')
def m2
puts 'm2'
end
end
# or
# main = TOPLEVEL_BINDING.eval('self')
# def main.m2
# puts 'm2'
# end
end
m1
m2 # => m2