作者热门文章
- xml - AJAX/Jquery XML 解析
- 具有多重继承的 XML 模式
- .net - 枚举序列化 Json 与 XML
- XML 简单类型、简单内容、复杂类型、复杂内容
'39', 'kim' => '35', 'larry' => '47' } for word in hash hash[word] += 1 end puts -6ren">
hash = { "bill" => '39', 'kim' => '35', 'larry' => '47' }
for word in hash hash[word] += 1 end
puts "Bill is now #{hash['bill]']}"
这是错误信息
undefined method `+' for nil:NilClass (NoMethodError)
最佳答案
这不起作用,因为 word
将代表散列中每个键/值对的数组。因此,在第一次通过循环时,word
将变为 ["bill", "39"]
。这就是 hash[word]
返回 nil
的原因。
图示:
ruby-1.9.2-p180 :001 > for word in hash
ruby-1.9.2-p180 :002?> puts word.inspect
ruby-1.9.2-p180 :003?> end
["bill", 40]
["kim", 36]
["larry", 48]
你可能想要的是:
hash.keys.each do |k|
hash[k] += 1
end
第二个问题是您将值存储为字符串而不是整数。因此,+= 1 操作将失败。将您的散列更改为此:
hash = { "bill" => 39, 'kim' => 35, 'larry' => 47 }
或者在执行 + 1 之前将值转换为整数。
关于ruby - 我认为我可以增加 ruby 中散列键的值。为什么会失败?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7987268/
我是一名优秀的程序员,十分优秀!