当我编写以下代码时,它运行正常:
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
。请帮帮我。
答案 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