类的超类不匹配

时间:2015-12-03 11:12:46

标签: ruby

当我编写以下代码时,它运行正常:

class Application
  def initialize(name)
    @name = name
  end
end

class Email2 < Application
end

但是当我将Email2更改为Email时:

class Application
  def initialize(name)
    @name = name
  end
end

class Email < Application
end

我收到了错误消息:superclass mismatch for class Email。请帮帮我。

2 个答案:

答案 0 :(得分:6)

必须已在其他地方定义Email类。

您可以使用defined?方法对此进行测试:

defined?(Email)

考虑使用模块命名空间代码:

module MyNameSpace
  class MyClass
  end
end

看起来您需要从CodeAcademy Context中删除该定义。尝试删除浏览器Cookie并刷新页面。

答案 1 :(得分:2)

发生错误是因为已经在其他地方定义了一个类Email,它继承自Application之外的其他内容。

当使用class关键字时,如果该类已经存在,ruby将尝试重新打开该类,允许您向现有类定义添加内容。

如果你写class Email < Application,ruby将尝试从Email继承Application。 Ruby类不能有多个父类,因此如果现有的Email类已经从其他类继承,则会出现此错误。

要从Message继承,请写下:class Email < Message