【问题标题】:How can ruby Object be a subclass of Object? [duplicate]ruby 对象如何成为对象的子类? [复制]
【发布时间】:2020-02-12 20:57:47
【问题描述】:
2.3.3 :001 > Object.class #=> Class
2.3.3 :002 > Class.ancestors #=> [Class, Module, Object, Kernel, BasicObject]

我无法理解这个概念。

我想象的如下所示

class Object < Class
  ...
end

class Class < Module
  ...
end

class Module < Object
  ...
end

这可能看起来很愚蠢,我错过了什么吗?我似乎找不到任何相关的答案。

【问题讨论】:

  • "这可能看起来很愚蠢,我是不是遗漏了什么?" – 你错过了你错了。 Object 不是 Class 的子类。
  • @JörgWMittag 是的,我知道,我试图通过想象那个愚蠢的场景来理解我读到的 here 的内容
  • 那篇文章毫无意义。这与声称“'Hello'String 的实例。StringObject 的子类。因此,'Hello'Object 的子类”完全相同。在这种情况下,更明显这是错误的,因为'Hello' 甚至不是一个类根本,因此不可能是一个“子类”东西。 Object 的情况完全相同,只是 Object 也恰好是一个类,如果您不注意当前是在谈论 Object 作为对象还是 @ 987654337@ 作为一个班级。

标签: ruby oop inheritance hierarchy class-hierarchy


【解决方案1】:

Object 类显然不是Class 的子类。事实上,ObjectBasicObject 的子类,也是其他类的默认超类:

Object.superclass
# => BasicObject

class A
end

A.superclass
# => Object

我猜你把对象的class(表示给定对象是什么类,Object 是一个类,所以这个方法正确地表示)误认为是继承。

【讨论】:

  • Object Class 呢?
  • 因为Object是类,你可以用Object.new等实例化它。Kernel是一个混合到Object类中的模块。
  • @vishnuprasanth:字符串的类是String。这让你感到惊讶吗?整数的类是Integer。这让你感到惊讶吗?那么,一个类的类是Class,应该不会让你感到惊讶吧?
  • @JörgWMittag 令我惊讶的是 Object.class #=> Class.
  • @vishnuprasanth:因为Object 是一个类,因此它的类是Class,与'Hello' 是一个字符串完全相同,因此它的类是String 而不是'Hello'。现在,Object 恰好是一个对象,与'Hello' 也恰好是一个对象完全相同,这就是为什么ClassString 最终继承自 Object
猜你喜欢
  • 2020-04-08
  • 2015-03-22
  • 2018-12-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-12-15
  • 2011-10-17
  • 1970-01-01
相关资源
最近更新 更多