8wDlpd.png
8wDFp9.png
8wDEOx.png
8wDMfH.png
8wDKte.png

使用 Hash 默认值时出现奇怪、意外的行为(消失/更改值),例如 Hash.new([])

Fred Blair 2月前

151 0

考虑以下代码:h = Hash.new(0) # 新的哈希对默认将具有 0 作为值h[1] += 1 #=> {1=>1}h[2] += 2 #=> {2=>2} 这些都很好,但是:h = Hash.new([]) # 空数组...

考虑以下代码:

h = Hash.new(0)  # New hash pairs will by default have 0 as values
h[1] += 1  #=> {1=>1}
h[2] += 2  #=> {2=>2}

这一切都很好,但是:

h = Hash.new([])  # Empty array as default value
h[1] <<= 1  #=> {1=>[1]}                  ← Ok
h[2] <<= 2  #=> {1=>[1,2], 2=>[1,2]}      ← Why did `1` change?
h[3] << 3   #=> {1=>[1,2,3], 2=>[1,2,3]}  ← Where is `3`?

此时我期望哈希值为:

{1=>[1], 2=>[2], 3=>[3]}

但事实并非如此。发生了什么事?我怎样才能获得我期望的行为?

帖子版权声明 1、本帖标题:使用 Hash 默认值时出现奇怪、意外的行为(消失/更改值),例如 Hash.new([])
    本站网址:http://xjnalaquan.com/
2、本网站的资源部分来源于网络,如有侵权,请联系站长进行删除处理。
3、会员发帖仅代表会员个人观点,并不代表本站赞同其观点和对其真实性负责。
4、本站一律禁止以任何方式发布或转载任何违法的相关信息,访客发现请向站长举报
5、站长邮箱:yeweds@126.com 除非注明,本帖由Fred Blair在本站《ruby》版块原创发布, 转载请注明出处!
最新回复 (0)
  • 这是错误的,Hash.new { [] } 不起作用。有关详细信息,请参阅我的答案。这也是另一个答案中提出的解决方案。

返回
作者最近主题: