挑战在Ruby方法中返回一个数组

时间:2016-01-23 06:11:32

标签: ruby-on-rails arrays ruby debugging

我遇到了一个返回数组的挑战。对于def won?(board)方法,我试图在满足if条件时返回0索引位置[0,1,2]中的数组。所以我说:return [0,1,2]

BUT!当我通过编辑器运行代码时,我收到以下错误消息:

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)>'

我提供了下面的代码以及数组。我尝试过使用puts或只是包含数组而且都没有工作。非常感谢您提出的任何建议!

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

1 个答案:

答案 0 :(得分:0)

这与返回数组绝对没有任何关系。事实上,正如错误信息非常清楚地告诉你,它甚至找不到方法,如果它找不到方法,那么显然该方法永远不会被调用,如果方法永远不会然后,基本逻辑告诉我们,方法内部的内容完全无关紧要,包括它返回的内容。

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

它没有找到任何名为won?的方法,因此它不可能执行您定义的方法,因此其返回值可能与您的问题无关。

你的问题是你的方法没有找到,你需要找出原因,而不是关注数组。