ruby对象模型+基于另一个类的类创建

时间:2013-02-12 14:10:51

标签: ruby

我的问题可能是非常基本的愚蠢,但我很困惑为什么输出是这样的。

MyClass = Class.new String
MyClass.ancestors
=> [MyClass, String, ..]

AnotherClass = Class.new MyClass
=> AnotherClass 
AnotherClass.ancestors
=> [AnotherClass, MyClass, String, ..]

在上面的代码中,我创建了一个名为MyClass的Class的新实例,并且传递了对象(ruby中的所有内容都是一个对象)'String'作为参数。为什么'String'出现在MyClass的祖先列表中。我没有从String继承MyClass,但这就是ruby似乎正在做的事情。它确实作为复制构造函数,但为什么继承?

2 个答案:

答案 0 :(得分:3)

以下

class A < B
end

实际上只是

的语法糖
A = Class.new B

有关详细信息,请参阅Random Ruby Tricks: Class.newofficial docs

答案 1 :(得分:1)

  

我没有从MyClass

继承String

是的,你有。这就是the argument to Class::new的含义:

  

new(super_class=Object)a_class

     

使用给定的超类创建一个新的匿名(未命名)类(如果没有给出参数,则为Object。)