test.rb
print self print self.class def hello() print "message" end puts object_id puts self.object_id hello self.hello
输出
main Object
直接调用 hello 正常 self.hello 报错 :in <main>': private methodhello' called for main:Object (NoMethodError)
<main>': private method
任何时候都有一个当前对象,当不在任何类和方法调用中时,当前对象是 main 对象,有时称为顶级上下文 (top level context)。实例变量都会定义在当前对象上,因此在顶级上下文中定义的实例变量都会定义在 main 对象上:
@var = "main instance variable" self.instance_variables # => 输入 [:@var]
参见:https://ruby-china.org/topics/26824
首先 main 和 Kernel 并不是同一个东西 第二,
def hello() print "message" end Kernel.send(:hello) #正常执行 Kernel.hello() #报错