gpt4 book ai didi

Ruby 哈希初始化器

转载 作者:数据小太阳 更新时间:2023-10-29 07:24:04 25 4
gpt4 key购买 nike

哈希初始化器:

# this
animals = Hash.new { [] }
animals[:dogs] << :Scooby
animals[:dogs] << :Scrappy
animals[:dogs] << :DynoMutt
animals[:squirrels] << :Rocket
animals[:squirrels] << :Secret
animals #=> {}
# is not the same as this
animals = Hash.new { |_animals, type| _animals[type] = [] }
animals[:dogs] << :Scooby
animals[:dogs] << :Scrappy
animals[:dogs] << :DynoMutt
animals[:squirrels] << :Rocket
animals[:squirrels] << :Secret
animals #=> {:squirrels=>[:Rocket, :Secret], :dogs=>[:Scooby, :Scrappy, :DynoMutt]}

我看到有人在另一个问题上发布了这些,但我不明白为什么动物在第一种情况下会出现空白。如果我输入

animals[:dogs]

我得到了合适的数组。

最佳答案

第一种形式指定为未找到的键返回默认值的 block 。这意味着当您调用 animals[:dogs] , 没有 :dogs哈希中的键,所以你的 block 被调用并且animals[:dogs]评估你的 block 的结果,即 [] .然后发生的是 << :Scooby附加 :Scooby到那个空列表,然后愉快地丢弃它。

第二种形式指定 block ,当请求 key 但未找到时,该 block 将哈希本身和未找到的 key 作为参数接收。它是第一个构造函数的稍微更强大的版本。不同之处在于你的 block 做了什么。在第二种形式中,您修改哈希以关联 []使用尚未找到的 key 。所以现在它存储在哈希和 << :Scooby 中将存储:Scooby那里。进一步调用 :dog不会触发 block ,因为现在 :dog存在于哈希中。

关于Ruby 哈希初始化器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9526210/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com