0

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

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
4

2 回答 2

3

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

parsed.map { |t| ... }

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

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

然后,在里面,当它实际上是一个二元素数组时Company#initialize,您将其视为 Hash。t

你根本不想使用mapon parsed,你只想使用Company.new(parsed).

于 2012-07-10T02:58:44.993 回答
2

map在散列上使用时,应在块中使用两个变量:

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

您似乎根本不想迭代parsed,您想将其用作以下参数Company.new

Company.new(parsed)
于 2012-07-10T02:59:10.907 回答