【问题标题】:When iterating over hash, getting "TypeError: can't convert String into Integer"遍历哈希时,得到“TypeError:无法将字符串转换为整数”
【发布时间】:2012-07-10 11:43:24
【问题描述】:

我有一个哈希(真正的要大得多)

parsed = {"follower_count" => 500, "something_else" => "etc", "xyz" => "abc"}

还有一个看起来像这样的班级

 class Company
   attr_accessor :followers

   def initialize(thehash)
      @followers = thehash['follower_count']
   end
 end

所以最后有这段代码会在我担心其他任何问题之前抛出错误

>> parsed.map {|t| Company.new(t)}
TypeError: can't convert String into Integer
  from (irb):7:in `[]'
  from (irb):7:in `initialize'
  from (irb):12:in `new'
  from (irb):12
  from (irb):12:in `map'
  from (irb):12:in `each'
  from (irb):12:in `map'
  from (irb):12

【问题讨论】:

    标签: ruby typeerror


    【解决方案1】:

    当你遍历一个 Hash 时,该块获取一个数组作为其参数,并且该数组包含(按顺序)Hash 中一对的键和值。所以,在这里:

    parsed.map { |t| ... }
    

    t实际上是一个二元数组,通常写成:

    parsed.map { |k, v| ... }
    

    然后,在Company#initialize 内部,当t 实际上是一个二元素数组时,您将其视为哈希。

    您根本不想在parsed 上使用map,您只想使用Company.new(parsed)

    【讨论】:

      【解决方案2】:

      当您在哈希上使用map 时,您应该在块中使用两个变量:

      parsed.map {|k,v| .. use k and v here .. }
      

      您似乎根本不想遍历parsed,而是想将其用作Company.new 的参数:

      Company.new(parsed)
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-03-01
        • 2015-04-26
        • 2013-09-29
        • 1970-01-01
        • 2014-11-26
        • 1970-01-01
        相关资源
        最近更新 更多