这里有一个聪明的技巧可以在 Ruby 中启用哈希自动成型(来自 facets):
尽管它(当然)能工作,但我发现我无法弄清楚这两行代码实际上是如何实现的,这让我感到非常沮丧。 leet被设置为默认值。 因此,只需访问h ['new_key'],就会将其提起并创建 'new_key' => {}。
现在,我期望'new_key'=>{}只返回默认值对象,而不是对其进行评估。 也就是说,'new_key' => {} 不会自动创建。那么,leet 实际上是如何被调用的呢?特别是带有两个参数?
# 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' => {}。
现在,我期望'new_key'=>{}只返回默认值对象,而不是对其进行评估。 也就是说,'new_key' => {} 不会自动创建。那么,leet 实际上是如何被调用的呢?特别是带有两个参数?