Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby:NoMethodError:undefined方法`+';零级:零级_Ruby - Fatal编程技术网

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社区也是如此:)