Ruby之self详解(二)_以及双冒号语法
?
请先看前一篇关于self的讲解:http://fantaxy025025.iteye.com/blog/1108639
另外,如果有时间看看rails高级编程,会有更深入的理解,这本书讲的还是满深入的。
?
熟悉一个例子
class C def m_c puts __method__ endendmodule A module B class C def m_a_b_c puts __method__ end end class D < C end class E < ::C end puts C puts ::C puts self puts self::C endend?输出:A::B::CCA::BA::B::Cm_c解释:这种双冒号开头语法本质上是去除了默认的作用域slef的限制,使得双冒号开头解释为self==Object,也就是说,::C==Object::C但没有::开头的类C表示self::C(为什么呢,看其所在的作用域)这样就可以解决到底extends哪个模块的问题了(例子中继承了哪个C)为啥不写为Object::C呢:? 原因1:简单,至少少敲了5次键,这也很符合perl的逻辑,嘿嘿;? 原因2:以后扩展方便么,万一Object也有顶层类等变化呢,待讨论咯,反正我这么觉得,你看ruby1.9已经这么干了
?
1 楼 tedeyang 2012-05-20 很好的解释。我是为双冒号来的。不得不说ruby隐晦的地方很多啊。 2 楼 tedeyang 2012-05-20 请先看前一篇关于self的讲解:http://fantaxy025025.iteye.com/admin/blogs/1108639