【发布时间】:2018-12-10 11:00:17
【问题描述】:
这主要是一个“学术”,但在这里:
根据这个 Ruby 特征类图(稍作编辑):
BasicObject.singleton_class.singleton_class.superclass 是 Class。
但是,在 Ruby 解释器 (Ruby v2.5.1) 上运行它,结果发现 BasicObject.singleton_class.singleton_class.superclass 是 #<Class:Class> 而不是 Class。因此,图表是在说谎还是我遗漏了什么?
该图来自我在 Freenode 的 Ruby IRC 聊天的一位用户。然而,它被许多其他用户多次引用,并被视为 Ruby 对象模型圣经。
【问题讨论】:
-
BasicObject.singleton_class.singleton_class.is_a?(Class) #⇒ true#Class是一个字符串表示形式。 -
你的问题是
BasicObject.singleton_class.singleton_class,但你的图表是BasicObject.singleton_class.singleton_class.superclass。请澄清。 -
@kstratis:啊,我明白了。好吧,当图表与现实发生冲突时,“哪个是正确的”的答案是显而易见的。 :)
-
你一直说
#Class。你看到这个的 ruby 版本和/或环境是什么?对我来说是#<Class:Class> -
检查了几个 ruby 版本到 1.9.3。都表现出相同的行为。猜猜我们一直在读错误的圣经:)
标签: ruby metaprogramming eigenclass