Ruby条件不触发reduce方法内部

时间:2019-10-29 20:08:35

标签: ruby

我已经盯着很久了,我不确定为什么我的条件没有触发。我删除了所有内容,然后将其留给两个条件和输出。由于某种原因,它会为所有数据返回完整的赢/输数组(长度为510),而不能只是该匹配团队的赢/输。

  def self.average_win_percentage(team_id)
    results = @@game_data.reduce([]) do |accum, game|
      if game.home_team_id == team_id
        game.home_goals > game.away_goals ? accum << "win" : accum << "loss"
      end
      if game.away_team_id == team_id
        game.away_goals > game.home_goals ? accum << "win" : accum << "loss"
      end
      accum
    end
    results
  end

有人知道为什么它不触发吗?我觉得它的确很明显,但我现在根本看不到。

@@ game_data中的每个元素如下所示。由于它是从csv中解析出来的,因此病态仅共享一个元素。

 @away_goals=2,
 @away_team_id="3",
 @date_time="5/16/13",
 @game_id="2012030221",
 @home_goals=3,
 @home_team_id="6",
 @season="20122013",
 @type="Postseason",
 @venue="Toyota Stadium",
 @venue_link="/api/v1/venues/null"

作为参数传递的team_id也是字符串类型

1 个答案:

答案 0 :(得分:2)

您的方法之一的返回值很可能不是您所期望的。您可以从没有您的方法的示例中看到它正常运行。您必须提供原始数据才能更有用。

在顶部使用binding.pryrequire 'pry'设置一个断点。然后检查返回值。也许一个ID是一个字符串,另一个ID是一个整数或类似的数字。

results = [1,2,3].reduce([]) do |accum, game|
  puts game
  if true
    1 > 0 ? accum << "win" : accum << "loss" 
  end
  if true
    1 > 0 ? accum << "win" : accum << "loss"
  end
  accum
end

results

#=> ["win", "win", "win", "win", "win", "win"]

require 'pry'
results = [1,2,3].reduce([]) do |accum, game|
  puts game
  if true
    0 > 1 ? accum << "win" : accum << "loss" 
  end
  if false
    1 > 0 ? accum << "win" : accum << "loss"
  end
  accum
end

results

#=> ["loss", "loss", "loss"]