2016-01-23 51 views
-1

我有一個返回數組的挑戰。對於def won?(board)方法,我試圖在滿足if條件時返回0索引位置[0,1,2]中的數組。所以我說:return [0,1,2]在Ruby方法中返回數組的挑戰

但是!當我在編輯器中運行的代碼,我得到這個錯誤信息:

returns an array of matching indexes for a top row win (FAILED - 3) 

和測試提供了這個錯誤:

Failure/Error: expect(won?(board)).to match_array([0,1,2]) 
    NoMethodError: 
    undefined method `won?' for #<RSpec::ExampleGroups::LibGameStatusRb::Won:0x007f82d3b26508> 
    # ./spec/game_status_spec.rb:35:in `block (3 levels) in <top (required)>' 

我提供了下面的代碼,與陣列一起。我嘗試過使用put或者只是將數組包含在內而不工作。你可能有任何建議,非常感謝!

WIN_COMBINATIONS = [ 
[0,1,2], 
[0,3,6], 
[0,4,8], 
[1,4,7], 
[2,5,8], 
[3,4,5], 
[6,7,8], 
[6,4,2] 
] 

top_row_win = WIN_COMBINATIONS[0] 
middle_row_win = WIN_COMBINATIONS[5] 
bottom_row_win = WIN_COMBINATIONS[6] 
left_column_win = WIN_COMBINATIONS[1] 
middle_column_win = WIN_COMBINATIONS[3] 
right_column_win = WIN_COMBINATIONS[4] 
left_diagonal_win = WIN_COMBINATIONS[2] 
right_diagonal_win = WIN_COMBINATIONS[7] 

def won?(board) 
    if board[top_row_win[0]] == "X" && board[top_row_win[1]] == "X" && board[top_row_win[2]] == "X" 
return [0,1,2] 
    else false 
end 
end 
+0

您打電話贏了?而不是贏 - 要麼改變你在測試中調用的方法,要麼改變代碼中的方法名稱。有些人不認爲這是對這個問題的答案,所以我把它作爲一個評論,並會避免指出未來 –

+0

def won的基本錯誤?雖然不起作用。 –

回答

0

這與返回數組完全沒有任何關係。事實上,由於錯誤信息非常清楚地告訴你,它甚至找不到該方法,如果找不到該方法,那麼顯然該方法永遠不會被調用,並且如果該方法從未被調用,則基本邏輯告訴我們,它完全和完全不相關,包括它返回的內容。

NoMethodError: undefined method `won?' for #<RSpec::ExampleGroups::LibGameStatusRb::Won:0x007f82d3b26508> 
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 

它沒有找到名爲won?任何方法,所以它不可能有執行你定義的方法,所以它的返回值不可能是有關您的問題。

你的問題是你的方法沒有找到,你需要弄清楚爲什麼是這種情況,而不是專注於數組。

+0

正如我在上面的評論中所述,我改變了方法,並沒有什麼區別。如果發生這種情況,請在投票回答問題前仔細閱讀評論。 –