0

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

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

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

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

4

2 回答 2

3

以下

class A < B
end

实际上只是一个语法糖

A = Class.new B

有关更多信息,请参阅Random Ruby Tricks: Class.new官方文档

于 2013-02-12T14:18:40.837 回答
1

我没有继承MyClassString

是的,你有。这就是参数的Class::new含义:

new(super_class=Object)a_class

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

于 2013-02-12T14:55:23.520 回答