我有一个哈希(真正的一个更大)
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
答案 0 :(得分:3)
当你遍历一个Hash时,该块获取一个数组作为其参数,该数组包含(按顺序)Hash中一对的键和值。所以,在这里:
parsed.map { |t| ... }
t
实际上是一个双元素数组,通常写成:
parsed.map { |k, v| ... }
然后,在Company#initialize
内部,当它实际上是一个双元素数组时,你将t
视为哈希。
您根本不想map
使用parsed
,只想Company.new(parsed)
。
答案 1 :(得分:2)
在哈希上使用map
时,您应该在块中使用两个变量:
parsed.map {|k,v| .. use k and v here .. }
您似乎根本不想迭代parsed
,您希望将其用作Company.new
的参数:
Company.new(parsed)