什么时候Ruby类可以有多个超类

MxL*_*evs 4 ruby inheritance class

为什么下面的代码会像我希望的那样运行?我的印象是一个类只能有一个超类,并且在第一次定义类时放置除了原始超类之外的其他东西会引发类型不匹配异常.

class Test
end

class MyTest < Test

  def run
    p 'my test'
  end
end

class MyTest < Object

  def run
    p 'redefine my test'
  end
end

MyTest.new.run
Run Code Online (Sandbox Code Playgroud)

结果

redefine my test
Run Code Online (Sandbox Code Playgroud)

tih*_*hom 5

只有继承了第二个类声明,它才适用于我(Ruby 1.9.2和1.9.3)Object.对MI的任何其他尝试都会引发TypeError.

它也不会改变类的继承.所以MyTest.superclass仍然Test即使class MyTest < Object

我认为这是因为Objectsuperclass定义新类时是默认值.来自文档:

new(super_class=Object) ? a_class
Run Code Online (Sandbox Code Playgroud)

因此,当Object作为被赋予superclass 它在不匹配检查忽略,因为如果它不知道Object是用户输入或默认值.