Ruby 这有什么原因吗?isn';工作不正常吗?
所以,我试图让这段代码运行,其中Ruby 这有什么原因吗?isn';工作不正常吗?,ruby,tic-tac-toe,Ruby,Tic Tac Toe,所以,我试图让这段代码运行,其中WIN_combines是一个嵌套数组,其中包含数组板上tic-tac-toe的获胜组合。我想我可以使用.all?方法返回最先得分的组合,但由于某些原因,它一直失败,如下所示: 需要一个可以转换为带有“#to_ary”的数组的集合 或“到” 完全被难住了!!任何帮助都将不胜感激。您的代码有两个主要问题: def won? WIN_COMBINATIONS.each do |wins| if wins.all?{|win_nu
WIN_combines
是一个嵌套数组,其中包含数组板上tic-tac-toe的获胜组合。我想我可以使用.all?
方法返回最先得分的组合,但由于某些原因,它一直失败,如下所示:
需要一个可以转换为带有“#to_ary”的数组的集合
或“到”
完全被难住了!!任何帮助都将不胜感激。您的代码有两个主要问题:
def won?
WIN_COMBINATIONS.each do |wins|
if wins.all?{|win_nums| @board[win_nums] = "X"}
wins
elsif wins.all?{|win_nums| @board[win_nums] = "O"}
wins
end
end
false
end
@board[win\u nums]=…
,这是分配–您需要=
,即比较false
,因此即使满足条件,也不会返回相应的wins
组合def won?
WIN_COMBINATIONS.each do |wins|
if wins.all?{|win_nums| @board[win_nums] = "X"}
wins
elsif wins.all?{|win_nums| @board[win_nums] = "O"}
wins
end
end
false
end
与分别从@board
获取wins
中的每个值不同,您可以使用一次获取所有3个值:
def won?
WIN_COMBINATIONS.each do |wins|
if wins.all? { |win_nums| @board[win_nums] == "X" }
return wins
elsif wins.all? { |win_nums| @board[win_nums] == "O" }
return wins
end
end
false
end
如果您想知道splash操作符*
–它将wins
数组转换为参数列表,以便value_at(*[0,1,2])
变成value_at(0,1,2)
通过将值u at
的结果存储在变量中,我们可以从上述代码中删除一些重复项。我们还可以使用|
组合这两个条件:
def won?
WIN_COMBINATIONS.each do |wins|
if @board.values_at(*wins).all?('X')
return wins
elsif @board.values_at(*wins).all?('O')
return wins
end
end
false
end
最后,还有一个为我们处理返回逻辑的方法:
def won?
WIN_COMBINATIONS.each do |wins|
values = @board.values_at(*wins)
return wins if values.all?('X') || values.all?('O')
end
false
end
请注意,find
返回nil
而不是false
以表示“不匹配”,但由于两者都是假的,所以这不应该是问题。您想要任何?
而不是所有?
?请编辑以显示赢的组合
(或者是赢的组合
)。嘿,你确定你想要@board[win\u nums]=“X”而不是@board[win\u nums]=“X”,这是所有人的文档吗?也许这也有帮助:你可能还想要返回wins
,而不仅仅是wins
——否则你的方法将始终返回false
。另一个选项是win\u组合。查找{…}
查找与您的条件匹配的第一个组合。请尝试以下操作:def-won?;WIN\u组合。任何?{{WIN |['X','O']。包括?(WIN.map{{cell |@board[cell]}.uniq)};end
“持续失败”不是一个足够精确的错误描述,我们无法帮助您。什么不起作用?它如何起作用?您的代码有什么问题?您是否收到错误消息?错误消息是什么?您得到的结果是否不是您期望的结果?您期望的结果是什么?为什么,您得到的结果是什么,以及如何处理两种不同?你观察到的行为不是期望的行为吗?期望的行为是什么,为什么,观察到的行为是什么,它们有什么不同?感谢你花时间教育我Stefan,这真的很有帮助!