加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

ruby – 这个哈希是怎么回事?

发布时间:2020-12-17 02:55:28 所属栏目:百科 来源:网络整理
导读:参见英文答案 Strange,unexpected behavior (disappearing/changing values) when using Hash default value,e.g. Hash.new([])????????????????????????????????????4个 我使用默认值为空数组创建一个新哈希. h = Hash.new([]) 我将一个值推入哈希,其中键是
参见英文答案 > Strange,unexpected behavior (disappearing/changing values) when using Hash default value,e.g. Hash.new([])????????????????????????????????????4个

>我使用默认值为空数组创建一个新哈希.

h = Hash.new([])

>我将一个值推入哈希,其中键是’a’.

h['a'].push(1243)

> h是空的.

h # => {}

> h [‘a’]返回预期值.

h['a'] # => [1243]

> h.keys返回一个空数组.

h.keys # => []

如果我在第一步中使用Hash.new {| h,k |初始化哈希h [k] = []}然后返回预期值.

解决方法

请注意,与块不同,所有参数仅在方法调用之前进行一次计算.

>在步骤1中,您将指定特定数组作为默认值.此数组实例将用于默认值h.请注意,由于您尚未使用块设置默认值,因此调用键值对不会将其分配给哈希.
>在步骤2中,调用默认值的数组实例,因为“a”不是哈希的键.您正在修改此数组实例.
>步骤3和5是一回事;由于您没有使用块分配h的默认值,因此调用的键值对未分配给散列.
>在步骤4中,您只是调用默认值.

将您的代码与此进行比较:

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

每次调用先前未调用的密钥时,它将生成一个新数组,并将该键值对分配给散列.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读