首页 > 解决方案 > 使用散列注入数组时出现“nil:NilClass 的未定义方法 `[]='”错误

问题描述

这是我第一次使用 Ruby,我需要使用注入方法从给定数组创建哈希。这段代码非常接近我找到的几个教程,但undefined method `[]=' for nil:NilClass在执行时出错。我在这里错过了什么吗?

def int_hash()
    [[:key1, "value1"], [:key2, "value2"]].inject({}) do |hash, element|
            hash[element.first] = element.last
            puts hash
    end
end

int_hash()

标签: arraysrubyhashtableinject

解决方案


由于puts是块中的最后一条语句,它返回nil,nil导致累加器hash处于nil第二次迭代中。您应该返回哈希值。您应该将数组作为参数传递给inj_hash方法以使其可重用。

def inj_hash(arr)
  arr.inject({}) do |hash, element|
    hash[element.first] = element.last
    hash
  end
end

inj_hash([[:key1, "value1"], [:key2, "value2"]])
#=> {:key1=>"value1", :key2=>"value2"}

从键值对数组创建散列的最简单解决方案是使用Hash::[].

arr = [[:key1, "value1"], [:key2, "value2"]]
Hash[arr]
#=> {:key1=>"value1", :key2=>"value2"}

推荐阅读