2013-02-12 64 views
0

我的问题可能是非常基本的愚蠢,但我很困惑为什么输出是这样的。基于另一个类的红宝石对象模型+类创建

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

AnotherClass = Class.new MyClass 
=> AnotherClass 
AnotherClass.ancestors 
=> [AnotherClass, MyClass, String, ..] 
在上面的代码

,I M创建类名为MyClass的一个新实例,并已通过所述对象(一切红宝石是一个对象)“字符串”作为参数。为什么'字符串'出现在MyClass的祖先列表中。我没有从String继承MyClass,但这正是Ruby所做的。它确实作为复制构造函数工作,但为什么继承?

回答

3

以下

class A < B 
end 

其实只是一个语法糖

A = Class.new B 

Random Ruby Tricks: Class.newofficial docs更多信息。

+0

谢谢。现在我明白为什么Object是默认的超类。我认为它可能会在cpp代码中设置一些内部指针,但是这是在Class.new中设置的。再次感谢。 – 2013-02-12 15:53:45

1

我还没有从String

是你继承MyClass。这就是the argument to Class::new意味着:

new(super_class=Object)a_class

创建一个新的匿名(未命名)类与给定超类(或Object如果未指定参数)。