はルビー(面から取られた)でハッシュautovivificationを可能にするための巧妙なトリックです:ルビーハッシュautovivification(面)
# 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
それは(もちろん)動作しますが、私は「それは本当にイライラする私ができることを見つけますこの二人のライナーがどういう仕組みになっているかを理解してください。
リートがデフォルト値として設定されます。だからちょうどh['new_key']
にアクセスして何とかそれを持ち出して作成します。h['new_key']
は評価するのではなく、デフォルト値オブジェクトを返すと思います。つまり、'new_key' => {}
は自動的に作成されません。だから、リートは実際にどのように呼び出されますか?特に2つのパラメータがありますか?
優れた答えです。 – Pesto
それは確かです。これは特に、RubyBook(標準的なルビーのWindowsディストリビューションに付属しています)をもう一度参照しないように教えてくれるのです。なぜなら、ブロックと新しいものについての小さな無関係な事実は言及していないからです。 – artemave