t = [
[
[["Armando", "P"],["Dave", "S"]],
[["Richard", "R"],["Michael", "S"]],
],
[
[["Allen", "S"],["Omer", "P"]],
[["David E.", "R"], ["Richard X.", "P"]]
]
]
def rps_game_winner(game)
raise WrongNumberOfPlayersError unless game.length == 2
if (game[0][1] =~ /[r]/i && game[1][1] =~ /[s]/i) || (game[0][1] =~ /[s]/i && game[1][1] =~ /[p]/i) || (game[0][1] =~ /[p]/i && game[1][1] =~ /[r]/i)
return game[0]
elsif (game[0][1] =~ /[r]/i && game[1][1] =~ /[p]/i) || (game[0][1] =~ /[s]/i && game[1][1] =~ /[r]/i) || (game[0][1] =~ /[p]/i && game[1][1] =~ /[s]/i)
return game[1]
elsif game[0][1] == game[1][1]
return game[0]
else
raise NoSuchStrategyError.new
end
end
def rps_tournament_winner(t)
t.each do |pair|
yield pair
end
end
rps_tournament_winner(t) { |x| rps_game_winner(x) }
所以我收到的錯誤是:NoSuchStrategyError: NoSuchStrategyError
- 這意味着收率傳遞一個值到所述塊並且被傳遞給我的方法rps_game_winner和它正在評估一些東西並給出這個錯誤 - 按照這個方法。沒有得到適當的迭代與陣列的複雜陣列收率
但它不能正確評估它....因爲它應該看Armando and Dave
並返回一個贏家,那麼它應該回去繼續看下一對,並返回贏家等
附:當我做puts pair
時,我看到了正確的值 - 並且我已經在單一對上測試rps_game_winner
方法,並且它工作正常。它只是迭代多對,給我一個來回控制權的問題。
我想你想提出'WrongNumberOfPlayers.new',而不是'WrongNumberOfPlayers'(類)。 – Linuxios 2012-03-13 21:35:48
可能重複的[獲得工作的數組嵌套數組 - 紅寶石](http://stackoverflow.com/questions/9680612/getting-yield-to-work-on-nested-arrays-of-arrays-ruby) – 2012-03-13 23:46:21
@ Linux_iOS.rb.cpp.c.lisp.m.sh:不,他沒有。雖然兩者都起作用,並且兩者實際上在語義上相同,但您的版本不是慣用的Ruby。 – 2012-03-14 01:20:34