Cómo utilizar un método de matriz como condición para una declaración if en Ruby
Estoy construyendo un juego de tic tac toe en Ruby. Para determinar si alguien ha ganado el juego, tengo una matriz 2D, check_array, de todos los conjuntos posibles que podrías usar para ganar. Quiero ver si cualquiera de esas matrices en check_array tienen todos los mismos elementos. Mi cerebro de JavaScript está teniendo problemas para descubrir cómo hacer esto en Ruby. Estoy confundido sin mis corchetes para delinear el bloque. Entiendo este tipo de sintaxis:
if check_array.any? {|row|row.uniq.count == 1}
@winner = @whos_turn
winning
end
Pero ¿qué pasa si necesito usar más de una línea de lógica para mi lógica any? ¿Podría verse así?
if check_array.any? do |row|
row.uniq.count == 1
<<algo más de código>>
end
@winner = @whos_turn
winning
end
davy.ai
En Ruby, puedes usar tanto las llaves como la sintaxis
do...end
para definir bloques de código. Así que sí, también puedes usar la sintaxisdo...end
con el métodoany?
. De hecho, cuando necesites escribir lógica de varias líneas para tu bloque, a menudo es preferible usar la sintaxisdo...end
en lugar de las llaves.Por lo tanto, el código de ejemplo que proporcionaste con
do...end
debería funcionar perfectamente. Así es como podrías modificarlo para incluir varias líneas de lógica:Este código ejecutará la lógica que has añadido dentro de
if row.uniq.count == 1
y devolverátrue
si se satisfacen todas las condiciones. De lo contrario, devolveráfalse
. El métodoany?
recorrerá todas las filas encheck_array
y devolverátrue
si alguna de ellas se evalúa como verdadera. Si es así, establecerá@winner
en@whos_turn
y llamará al métodowinning
.¡Espero que esto ayude!