因此,假设我们有以下三个methods
检查网格以确定是否有赢家,并且如果存在则返回true
。
def win_diagonal?
# Code here to check for diagonal win.
end
def win_horizontal?
# Code here to check for horizontal win.
end
def win_vertical?
# Code here to check for vertical win.
end
我想将每个方法的返回值推送到Array
,而不是逐字地使用方法名称。这可能吗?
def game_status
check_wins = [win_vertical?, win_diagonal?, win_horizontal?]
if check_wins.uniq.length != 1 # When we don't have only false returns from methods
return :game_over
end
end
答案 0 :(得分:2)
您正在寻找的东西确实可以用于红宝石。
def hello_world?
"hello world!"
end
a = [hello_world?]
打印
=> [“你好世界!”]
希望有所帮助。当你想知道Ruby中是否有可能时,IRB
是你的朋友: - )
答案 1 :(得分:1)
更简单的方式(并且非常易读):
def game_status
win_vertical? || win_diagonal? || win_horizontal?
end
例如,如果 win_vertical?返回true,则其他算法甚至不需要运行。你马上回来。
或者,如果你需要知道用户赢了哪个方式,我的意思是,如果你需要在运行后保留所有方法的结果,你可以使用哈希,如:
{:vertical => win_vertical?, :diagonal => win_diagonal?, :horizontal => win_horizontal?}
此解决方案与数组一样,比上面的第一个解决方案更差,因为它始终运行所有算法。如果它们很复杂,您可能会遇到问题。 =)
答案 2 :(得分:1)
当您真的想要将所有返回值存储在数组中时,可以执行以下操作:
def game_status
check_wins = [win_vertical?, win_diagonal?, win_horizontal?]
return :game_over if check_wins.any?
end
为了便于阅读,我更愿意:
def game_status
return :game_over if win_vertical? || win_diagonal? || win_horizontal?
end