gpt4 book ai didi

ruby 散列自动生成(方面)

转载 作者:数据小太阳 更新时间:2023-10-29 06:51:30 27 4
gpt4 key购买 nike

这是在 ruby​​ 中启用散列自动生成的巧妙技巧(取自 facets):

  # File lib/core/facets/hash/autonew.rb, line 19
def self.autonew(*args)
leet = lambda { |hsh, key| hsh[key] = new( &leet ) }
new(*args,&leet)
end

虽然它有效(当然),但我真的很沮丧,因为我无法弄清楚这两个衬垫是如何工作的。

leet 被设置为默认值。这样一来,只需访问 h['new_key'] 就会以某种方式启动并创建 'new_key' => {}

现在,我希望 h['new_key'] 返回默认值对象而不是对其求值。也就是说,'new_key' => {} 不会自动创建。那么 leet 实际上是如何被调用的呢?尤其是有两个参数?

最佳答案

标准new method for Hash接受一个 block 。如果尝试访问 Hash 中不存在的键,则会调用此 block 。该 block 传递给哈希本身和请求的 key (两个参数),并且应该返回应该为请求的 key 返回的值。

您会注意到 leet lambda 做了两件事。它返回一个新的散列,其中 leet 本身作为处理默认值的 block 。这是允许 autonew 为任意深度的哈希工作的行为。它还将这个新的哈希分配给 hsh[key],以便下次您请求相同的 key 时,您将获得现有的哈希,而不是创建新的哈希。

关于 ruby 散列自动生成(方面),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1503671/

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