Hash、初期化しておくと何を入れるのか明確にできるし、
Hashを引数にとる関数で使う時も、nilでもいいから初期値を入れておけばHash#has_key?でいらん値をはじくのに使えて便利。


さっき作ってた物の中の処理で、
追加した順番に番号(indexというフィールド)を振りたいと思ってlambdaを入れてみたら動いた

#!/usr/bin/env ruby
fields = Hash.new{|h,k|
h[k] = {
:index => lambda{ fields.keys.size }.call,
:type => String,
:default => nil,
:value => nil
}
}

p fields

fields[:foo][:value] = 'shokai'
p fields

fields[:bar][:value] = 100
fields[:bar][:type] = Fixnum
p fields


追加した順番にindexが増える、ちょっと便利
{}
{:foo=>{:index=>0, :type=>String, :default=>nil, :value=>"shokai"}}
{:foo=>{:index=>0, :type=>String, :default=>nil, :value=>"shokai"}, :bar=>{:index=>1, :type=>Fixnum, :default=>nil, :value=>100}}


最近Ruby書いてて思うんだけど、APIの使い勝手を優先するために少しがんばれば大抵なんでも実現できてすごい。