Ruby:NoMethodError:undefined方法`+';零级:零级
有人知道为什么下面的代码返回错误吗Ruby:NoMethodError:undefined方法`+';零级:零级,ruby,Ruby,有人知道为什么下面的代码返回错误吗 stock = {"M9788375085969"=>5, "M9788392289760"=>5, "M9788389371461"=>1, "M9788389371447"=>3, "M9788392289761"=>2} add = {"M9788375085969"=>1, "M9788392289760"=>2, "NEW9788392289753"=>1 } add.each do |key, va
stock = {"M9788375085969"=>5, "M9788392289760"=>5, "M9788389371461"=>1, "M9788389371447"=>3, "M9788392289761"=>2}
add = {"M9788375085969"=>1, "M9788392289760"=>2, "NEW9788392289753"=>1 }
add.each do |key, value|
stock[key] += value
end
NoMethodError: undefined method `+' for nil:NilClass
虽然类似的方法也很管用:
key = "M9788375085969"
value = 1
stock[key] += value
=> 6
键“NEW9788392289753”
不存在于散列股票
中,但存在于添加
散列中。见下文:
stock = {"M9788375085969"=>5, "M9788392289760"=>5, "M9788389371461"=>1, "M9788389371447"=>3, "M9788392289761"=>2}
stock['NEW9788392289753'] # => nil
nil.respond_to?(:+) # => false # means NilClass don't has method called :+
因此,nil.+(value)
抛出一个有效错误。按以下步骤进行:
stock = {"M9788375085969"=>5, "M9788392289760"=>5, "M9788389371461"=>1, "M9788389371447"=>3, "M9788392289761"=>2}
add = {"M9788375085969"=>1, "M9788392289760"=>2, "NEW9788392289753"=>1 }
add.each do |key, value|
p stock[key] += value if stock.has_key?(key) # it will take care of the error.
end
输出
6
7
根据OP的意见,我将采取以下措施:
add.each do |key, value|
if stock.has_key?(key)
stock[key] += value
else
stock[key] = value
end
end
add
散列中有一个键在stock
散列中丢失:“NEW9788392289753”
执行
stock[“NEW9788392289753”]
时,返回nil
,因为键未映射。因为add
中的键NEW9788392289753
未包含在stock
中,处理不存在键的另一种方法是提供默认值零:
stock = {"M9788375085969"=>5, "M9788392289760"=>5, "M9788389371461"=>1, "M9788389371447"=>3, "M9788392289761"=>2}
add = {"M9788375085969"=>1, "M9788392289760"=>2, "NEW9788392289753"=>1 }
stock.default = 0
add.each do |key, value|
stock[key] += value
end
p stock #=> {"M9788375085969"=>6, "M9788392289760"=>7, "M9788389371461"=>1, "M9788389371447"=>3, "M9788392289761"=>2, "NEW9788392289753"=>1}
看起来很直截了当,不是吗?很漂亮。谢谢大家<代码>添加。每个do |键,值|开始库存[键]+=值拯救库存[键]=值结束。再次感谢。这也是一个好的、干净的、简单的解决方案。Ruby很漂亮,Ruby社区也是如此:)