新手问题 关于顶层方法

Mr_watermelon · 2016年10月04日 · 最后由 Mr_watermelon 回复于 2016年10月05日 · 1941 次阅读

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 调用

需要 登录 后方可回复, 如果你还没有账号请 注册新账号