2015-12-03 59 views
-1

類超類不匹配時,我寫了下面的代碼,它運行正常:

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

class Email2 < Application 
end 

但是,當我改變Email2Email這樣的:

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

class Email < Application 
end 

我得到的錯誤信息:superclass mismatch for class Email。請幫幫我。

+0

..:

Message繼承,你寫的嗎?我的意思是在控制檯? – Minato

+0

可能的重複[Ruby on Rails 3:「類的超類不匹配...」](http://stackoverflow.com/questions/5512023/ruby-on-rails-3-superclass-mismatch-for-class) – Minato

+0

我在Firefox瀏覽器上編碼?我在網上在線編碼 – Viet

回答

4

Email類必須已經定義在其他地方。

您可以通過使用defined?方法是這樣測試:

defined?(Email) 

想想用模塊命名空間代碼:

module MyNameSpace 
    class MyClass 
    end 
end 

看起來你需要刪除自定義CodeAcademy上下文。嘗試刪除瀏覽器Cookie並刷新頁面。

+0

當我在代碼的末尾添加「defined?(Email)」時,它會打印出「constant」 但是那是在研究網站,那是我必須解決的問題 是我的使命: 「創建第二個類,電子郵件,從消息繼承。給它自己的初始化方法,只需要一個參數,主題,並有一個實例變量,@subject,設置爲主題。「 如何解決它?我想跳轉到下一個損害? – Viet

+0

你可以給我發送鏈接到課程? – jphager2

+0

https://www.codecademy.com/courses/ruby-beginner-en-MFiQ6/3/4?curriculum_id=5059f8619189a5000201fbcb 但我認爲你必須從頭開始。謝謝你 – Viet

2

發生此錯誤是因爲已經有一個類別Email定義在其他地方,它從Application以外的其他地方繼承。

當使用class關鍵字時,如果類已經存在,ruby將嘗試重新打開該類,從而允許您將事物添加到現有的類定義中。

如果你寫class Email < Application,ruby會嘗試使Email繼承Application。 Ruby類不能有多於一個父類,所以如果現有的Email類已經從其他類繼承,則會出現此錯誤。你在哪裏編碼class Email < Message

+0

是的,我已將其從「應用程序」更改爲「消息」 我明白爲什麼發生該錯誤。 但我在http://codecademy.com網站上學習。我不知道我該怎麼做才能通過這個病變: 「創建第二個類,電子郵件,從消息繼承。給它自己的初始化方法,只需一個參數,主題,並有一個實例變量,@ 「」 – Viet

+0

@Viet也許這不是要求解決方案來學習材料的正確論壇,也許你應該閱讀一下Ruby的基礎知識。 – Jesper