我的问题可能是非常基本的愚蠢,但我很困惑为什么输出是这样的。
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似乎正在做的事情。它确实作为复制构造函数,但为什么继承?
答案 0 :(得分:3)
答案 1 :(得分:1)
我没有从
继承MyClass
String
是的,你有。这就是the argument to Class::new
的含义:
new(super_class=Object)
→a_class
使用给定的超类创建一个新的匿名(未命名)类(如果没有给出参数,则为
Object
。)