Ruby   发布时间:2022-04-03  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了ruby – 修改默认哈希值大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
参见英文答案 > Strange,unexpected behavior (disappearing/changing values) when using Hash default value,e.g. Hash.new([])5个
Ruby允许您为哈希定义默认值:
h=Hash.new(['alright'])
h['meh'] # => ["alright"]

显示散列时会显示值的赋值,但修改后的默认值不会.哪里’糟糕’?

h['good']=['fine','dandy']
h['bad'].push('unhappy')
h # => {"good"=>["fine","dandy"]}

如果我们明确要求,’坏’会出现.

h['bad'] # => ["alright","unhappy"]

为什么在显示哈希时不会显示修改后的默认值?

解决方法

哈希的默认值不像你期望的那样工作.当你说h [k]时,过程如下:

>如果我们有一个k键,则返回其值.
>如果我们有Hash的默认值,则返回该默认值.
>如果我们有一个提供默认值的块,请执行该块并返回其返回值.

注意,(2)和(3)没有说明将k插入哈希.默认值实质上将h [k]变为:

h.has_key?(k) ? h[k] : the_default_value

因此,只需访问一个不存在的密钥并获取默认值就不会将缺少的密钥添加到哈希中.

此外,任何形式:

Hash.new([ ... ])
# or
Hash.new({ ... })

几乎总是一个错误,因为你将为所有默认值共享完全相同的默认数组或哈希值.例如,如果您这样做:

h = Hash.new(['a'])
h[:k].push('b')

然后h [:i],h [:j],…将全部返回[‘a’,’B’],这很少是你想要的.

我想你正在寻找block form of the default value

h = Hash.new { |h,k| h[k] = [ 'alright' ] }

这将做两件事:

>访问不存在的密钥会将该密钥添加到哈希,并且它将提供的数组作为其值.>所有默认值都是不同的对象,因此更改其中一个不会改变其余对象.

大佬总结

以上是大佬教程为你收集整理的ruby – 修改默认哈希值全部内容,希望文章能够帮你解决ruby – 修改默认哈希值所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。