0

Ruby は、ブロックを に渡すことにより、ハッシュの自動有効化をサポートしていますHash.new

hash = Hash.new { |h, k| h[k] = 42 }
hash[:foo] += 1   # => 43

構造体の自動有効化も実装したいと思います。これは私が思いつくことができる最高のものです:

Foo = Struct.new(:bar) do
  def bar
    self[:bar] ||= 42
  end
end

foo = Foo.new
foo.bar += 1   # => 43

もちろん、これはフォーム ( foo.bar) ではなく、名前付きアクセサー ( ) のみを自動有効化します。構造体の自動有効化を実装するより良い方法はありますか?特に、フォームとフォームの両方で確実に機能する方法はありますか?[]foo[:bar]foo.barfoo[:bar]

4

1 に答える 1