新手问题 关于顶层方法

Mr_watermelon · October 04, 2016 · Last by Mr_watermelon replied at October 05, 2016 · 1931 hits

def a= (value) a = value puts a end

self.a= 10

上面的例子中 顶层方法 a=(value) 是 Object 类的私有实例方法 为什么可以用 self 显式调用? 去掉=号后就不能显式调用了

不加 self,此时的语义是定义一个局部变量

irb(main):001:0> self
=> main
irb(main):002:0> self.class
=> Object

挺有意思的问题。在 top level 中,self 指向了 Object 的 Instance main。你可以想象成这个 top level 的 scope 其实都是在 main 的某个 method 中。

main 的 def 是定义 Kernel 的私有方法(特例),main 的 define_method 和 define_singleton_method 也是等同的

不过 self.a=确实也是特例,因为拟态方法就得用 self 调用

You need to Sign in before reply, if you don't have an account, please Sign up first.