使用散列注入数组时出现 "undefined method `[]=' for nil:NilClass" 错误
Getting "undefined method `[]=' for nil:NilClass" error when injecting array with hash
这是我第一次使用 Ruby,我需要使用 inject 方法从给定数组创建哈希。这段代码非常接近我发现的几个教程,但在执行时出现 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()
因为 puts
是块中的最后一条语句并且它 returns nil
,nil
是 returned 导致累加器 hash
在第二次迭代中变为 nil
。你应该 return 散列。您应该将数组作为参数传递给 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"}
这是我第一次使用 Ruby,我需要使用 inject 方法从给定数组创建哈希。这段代码非常接近我发现的几个教程,但在执行时出现 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()
因为 puts
是块中的最后一条语句并且它 returns nil
,nil
是 returned 导致累加器 hash
在第二次迭代中变为 nil
。你应该 return 散列。您应该将数组作为参数传递给 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"}