新手问题 关于 Ruby eigenclass 问题

lizihao · 2017年02月23日 · 最后由 netqyq 回复于 2017年02月24日 · 1255 次阅读

p String.singleton_class.superclass #=> Class:Object

p String.superclass.singleton_class #=> Class:Object

这两行代码解释 ruby 中类的 eigenclass 的超类就是类的超类对应的 eigenclass

可是

p BasicObject.superclass.singleton_class #=> NilClass

p BasicObject.singleton_class.superclass #=> Class

这两行代码怎么解释?

我的 ruby 是 2.0 版本

p BasicObject.superclass.singleton_class #=> NilClass BasicObject 的 superclass 是 nil,nil 的 singleton_class 是 NilClass p BasicObject.singleton_class.superclass #=> Class BasicObject 的 singleton_class 是 #Class:BasicObject ,这是一个 class object,任何 class object 的 superclass 都是 Class

geekerzp 回复

为什么任何 类对象 的 superclass 都是 Class String.superclass #=> Object 是所有的类对象的 class 才是 Class 吧

(BasicObject) 就是 #class:BasicObject 他的 superclass 就是 Class

BasicObject 没有父类 BasicObject 的 singleton_class 也是类,该类的父类 就是 Class

BasicObject 应该是特例。BasicObject 无超类。

BasicObject.superclass # => nil

BasicObject 已经到了继承链的最顶端,所以不能适用此规则。

《Ruby 元编程》中大统一理论中第五条应该说的就是这个特例,第六条说的才是这个绕口令。

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