Ruby - 使用返回的方法值填充Populate和Array

时间:2014-06-22 03:44:20

标签: ruby arrays function methods

因此,假设我们有以下三个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

3 个答案:

答案 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