Ruby 2.0 から始めたときに、新しいキーワード パラメータで動作する小さなスクリプトを作成しました。これをコーディングしているときに、ブロックとラムダの動作に驚きました。以下は私が見つけたものを練習します:
def print_parameters(proc = nil, &block)
p "Block: #{block.parameters}" if proc.nil?
p "Lambda: #{proc.parameters}" unless proc.nil?
end
print_parameters(-> (first, second = 'test') {})
print_parameters(&-> (first, second = 'test') {})
print_parameters {|first, second = 'test'|}
結果は次のとおりです。
"Lambda: [[:req, :first], [:opt, :second]]"
"Block: [[:req, :first], [:opt, :second]]"
"Block: [[:opt, :first], [:opt, :second]]"
ブロックの作成に必要なパラメーターがないのに、ラムダまたはラムダから作成されたブロックを使用するのはなぜですか?