新手问题 不写在 class 中的 self 是什么?

tablecell · 2020年09月05日 · 最后由 crella6 回复于 2020年09月05日 · 995 次阅读

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 对象,有时称为顶级上下文 (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() #报错
需要 登录 后方可回复, 如果你还没有账号请点击这里 注册