IndexError:使用inject不匹配的字符串

时间:2014-09-11 17:49:16

标签: ruby

这就是我想要的:

{ "[first_name]" => "first_name", "[last_name]" => "last_name" }

这就是我的尝试:

columns
# => ["first_name","last_name"]
columns.inject({}) do |acc, column|
  acc["[#{column}]"] = column
end
# => IndexError: string not matched

似乎认为acc是一个字符串而不是哈希,如下所示:

Rails strange error => IndexError: string not matched

但是肯定acc是哈希。这有什么问题?

3 个答案:

答案 0 :(得分:2)

inject与哈希一起使用时,请确保在块的末尾返回修改后的哈希:

columns.inject({}) do |acc, column|
  acc["[#{column}]"] = column
  acc
end

# => {"[first_name]"=>"first_name", "[last_name]"=>"last_name"} 

答案 1 :(得分:1)

您还可以使用merge!汇总结果:

columns.inject({}) { |r, e| r.merge!({"[#{e}]" => e}) }
# => {"[first_name]"=>"first_name", "[last_name]"=>"last_name"}

答案 2 :(得分:0)

hash = columns.inject({}) do |acc, column|
  acc["[#{column}]"] = column
  acc
end