我遇到了一个返回数组的挑战。对于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
答案 0 :(得分:0)
这与返回数组绝对没有任何关系。事实上,正如错误信息非常清楚地告诉你,它甚至找不到方法,如果它找不到方法,那么显然该方法永远不会被调用,如果方法永远不会然后,基本逻辑告诉我们,方法内部的内容完全无关紧要,包括它返回的内容。
NoMethodError: undefined method `won?' for #<RSpec::ExampleGroups::LibGameStatusRb::Won:0x007f82d3b26508> ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
它没有找到任何名为won?
的方法,因此它不可能执行您定义的方法,因此其返回值可能与您的问题无关。
你的问题是你的方法没有找到,你需要找出原因,而不是关注数组。