2015-03-02 68 views
0

我想了解爲什麼我得到這個錯誤,我懷疑這是因爲我有我的Controller類和在兩個獨立的Ruby文件中查看類。我被告知使用require_relative'filename'應該將所有代碼從一個文件引用到另一個文件中,但我似乎錯過了一些東西。好吧這裏去,不明白爲什麼我得到一個`初始化':未初始化的常量Controller :: View(NameError)

controller.rb文件,我有

require_relative 'view' 
require_relative 'deck_model' 
require_relative 'flashcard_model' 



class Controller 

    def initialize 
    @deckofcards = Deck.new 
    @welcome = View.new.welcome 
    @player_guess = View.new.get_user_guess 
    @success_view = View.new.success 
    @failure_view = View.new.failure 
    end 

    def run 
    #Logic to run the game 
    # @current_card 
    # @user_guess 
    puts "Let's see if this prints" 
    # pull_card_from_deck 

    end 

end 

在我view.rb文件,我有,

require_relative 'controller' 

class View 

    attr_accessor :userguess 

    def initialize (userguess = " ") 
     @userguess = userguess 
    end 

    def welcome 
     system ("clear") 
     puts "Welcome! Let's play a game." 
     puts "I'll give you a definition and you have to give me the term" 
     puts "Ready..." 
    end 

    def get_user_guess 
     @userguess = gets.chomp.downcase 
    end 

    def success 
     puts "Excellent! You got it." 
    end 

    def failure 
     puts "No, that's not quite right."  
    end 


end 

然而,當我運行控制器.rb,出現以下錯誤,

/Users/sean/Projects/flash/source/controller.rb:11:in `initialize': uninitialized constant Controller::View (NameError) 
from /Users/sean/Projects/flash/source/controller.rb:51:in `new' 
from /Users/sean/Projects/flash/source/controller.rb:51:in `<top (required)>' 
from /Users/sean/Projects/flash/source/view.rb:1:in `require_relative' 
from /Users/sean/Projects/flash/source/view.rb:1:in `<top (required)>' 
from controller.rb:1:in `require_relative' 
from controller.rb:1:in `<main>' 

任何人都可以請幫我解決這個問題。

+0

你發佈的回溯說錯誤發生在'/Users/sean/Projects/flash/source/controller.rb:51'的第51行,但是你發佈的文件要短得多。請發佈您的整個代碼以及您用來運行它的確切命令。 – 2015-03-02 17:11:37

+0

+1給@DavidGrayson。因爲你的'View'類不使用任何'Controller'代碼,所以我還會移除'require_relative'controller''。 – 2015-03-02 17:13:45

回答

2

您沒有發佈完整的代碼,但它聽起來像是由您在項目中指定的循環依賴關係造成的錯誤。您有view.rb,具體取決於controller.rbcontroller.rb,具體取決於view.rb。 Ruby解釋器不會同時執行這些文件;它必須執行一個然後執行另一個。

看起來它首先執行controller.rb,但它看到view.rb是必需的,因此它開始執行該操作。然後在view.rb看到controller.rb是必需的,所以它再次開始執行controller.rb。然後在controller.rb的某個點,您必須創建Controller類的新實例。但是我們尚未定義View類,因此View未定義,並且在嘗試創建該控制器時出現異常。

要解決此問題,您應該考慮不創建任何ControllerView對象,直到兩個類都完全加載。

+0

是的,就是這樣。非常感謝大衛。 – 2015-03-02 17:18:32

2

+1 to @DavidGrayson評論。

如果我的假設是正確的,您的問題是require_relative 'controller'在您的view.rb文件。

如果你看,它看起來像View被要求Controller然後,控制器被加載,這似乎是發送new某處Controller,然後發送到newView它尚未完全必需的。

相關問題