ruby - IRB 和 Ruby 对象模型

标签 ruby oop

<分区>

我是 Ruby 的初学者,正在尝试了解其对象模型。

在 IRB 中。我创建了一个名为 MyClass 的类并开始检查对象模型,如下所示:

    2.1.0p0 :013 > MyClass.class
     => Class
    2.1.0p0 :014 > MyClass.superclass
     => Object 
    2.1.0p0 :015 > Class.class
     => Class 
    2.1.0p0 :016 > Class.superclass
     => Module 
    2.1.0p0 :017 > Object.class
     => Class 
    2.1.0p0 :018 > Object.superclass
     => BasicObject 
    2.1.0p0 :019 > BasicObject.class
     => Class 
    2.1.0p0 :020 > BasicObject.superclass
     => nil

问题一

MyClass.class == Class.class 返回 true< 时,为什么 Myclass.superclassClass.superclass 不同?

    2.1.0p0 :021 > Class.class == MyClass.class
     => true

换句话说:为什么它们的父类(super class)不同?

问题2

这张图准确吗? Diagram's Link

提前谢谢你。

最佳答案

在 Ruby 上,类也是对象,这就是类的类实际上是 Class 的原因。

这就是为什么:

Class.class   #=> Class
MyClass.class #=> Class
Class.class == MyClass.class #=> true

您不是在每个类的实例上调用 class,而是在类本身上调用它。几乎等同于:

"hey".class  #=> String
"jude".class #=> String
"hey".class == "jude".class #=> true

这可能是您一开始所期望的:

MyClass.new.class #=> MyClass
Class.new.class   #=> Class
MyClass.new.class == Class.new.class #=> false

关于ruby - IRB 和 Ruby 对象模型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21169278/

相关文章:

ruby - 如何在二叉树上的 ruby​​ 中实现就地映射方法(映射!)?

ruby - Selenium RC :How to launch Interactive testing with Multiple browsers

java - 面向对象 : Does container contain bike or chair?

c# - 当其中一个实现需要更多数据时该怎么办

java - 一长串 if/else/execute 代码分支的最佳设计模式/方法

python - 函数初始化和对象初始化(多处理)

ruby-on-rails - ActionMailer 实例方法像类方法一样使用

python - 在 1 个 vim 缓冲区中编辑多个文件

ruby-on-rails - 我可以从模型中获取表、列和类型信息吗?

java - 处理依赖 Java 库添加新类吗?