【问题标题】:Error: "No implicit conversion of Symbol into Integer"错误:“没有将符号隐式转换为整数”
【发布时间】:2014-04-03 20:20:57
【问题描述】:

我正在尝试将球队名称存储在 @wins@loss 中,具体取决于与相应键关联的主客场比分。

@leaderboard_info = [{
                      home_team:"Patriots",
                      away_team: "Broncos",
                      home_score: 7,
                      away_score: 3
                      }, 
                      #more info in hashes.........]

@wins = []
@loss = []

@leaderboard_info.each do |game|
  game.each do |key,value|
    if value[:home_score] > value[:away_score]  #7 > 3
      @win << value[:home_team]   #Patriots
      @loss << value[:away_team]  #Broncos 
    else
      @loss << value[:home_team]
      @win << value[:away_team]
    end
  end
end

但我一直遇到这个错误

[]': no implicit conversion of Symbol into Integer (TypeError)

if 语句应该获取 7 和 3 的特定值。然后它应该推送值存储的团队名称。为什么它不起作用?我用key[home_score] 等尝试过,但还是不行。

【问题讨论】:

  • 这是很多个实例变量,特别是考虑到您的评论#more info in hashes。您是否意识到所有这些信息对于您创建的每个对象都是重复的?
  • 另外,您已经定义了数组@wins = [],但是您正在将信息推送到@win。如果不查看程序的其余部分,就不可能知道正确的代码应该是什么,但从您所展示的内容来看,它看起来非常仓促。

标签: ruby arrays data-structures hash


【解决方案1】:

我认为您应该删除双循环并将其更改为:

@leaderboard_info.each do |game|
  if game[:home_score] > game[:away_score]
    @win << game[:home_team]
    @loss << game[:away_team]
  else
     @loss << game[:home_team]
     @win << game[:away_team]
  end
end

【讨论】:

  • Aguardientico,非常感谢,我终于让它工作了。我真的很感激。
  • 很高兴能为您提供帮助
【解决方案2】:

问题是您在哈希上调用 each,这会产生(如您的代码所指出的)哈希中 每条记录 的键和值。因此,当您调用 value[:home_team] 时,您正在对字符串(“Patriots”)使用 [] 方法。 String 上的 [] 方法需要一个 Fixnum(用于拆分字符串)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多