【问题标题】:IRB and Ruby Object Model [duplicate]IRB 和 Ruby 对象模型 [重复]
【发布时间】:2014-01-16 17:54:43
【问题描述】:

我是 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

问题 1

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

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

换句话说:为什么它们的超类不同?

问题 2

这张图准确吗? Diagram's Link

提前谢谢你。

【问题讨论】:

标签: ruby oop


【解决方案1】:

在 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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-12-20
    • 2020-06-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多