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

tablecell · September 05, 2020 · Last by crella6 replied at September 05, 2020 · 1118 hits

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() #报错
You need to Sign in before reply, if you don't have an account, please Sign up first.