Ruby Tips!

RubyのTipsを紹介します

無名関数を生成する

Rubyにおける無名関数の正体はProcオブジェクトである。Procオブジェクトの生成には、kernel#.lambdaKernel#.procまたはProc.newを使う。ProcオブジェクトはProc#callで呼び出して使うことができる。以下は2つの引数を取り、それらを加算する無名関数を生成して、計算を行う例である。

func = lambda{|a, b| a + b }
p func #=> #<Proc:0x0000000180d8a0@/tmp/vCWIAge/49:1 (lambda)>
p func.call(1, 2) #=> 3
func = proc{|a, b| a + b }
p func #=> #<Proc:0x00000001a72898@/tmp/vCWIAge/51:1>
p func.call(1, 2) #=> 3
func = Proc.new{|a, b| a + b }
p func #=> #<Proc:0x000000016c58d0@/tmp/vCWIAge/53:1>
p func.call(1, 2) #=> 3

またRuby 1.9では->を使うと無名関数を生成することができる。これで生成されるのもProcオブジェクトであることに変わりはない。ただし->で生成した無名関数は他の方法で生成した無名関数より引数のチェックが厳密に行われることに注意。引数の個数が異なるとArgumentError例外が発生する。

func = ->(a, b){ a + b }
p func #=> #<Proc:0x00000002732948@/tmp/vCWIAge/55:1 (lambda)>
p func.call(1, 2) #=> 3
p func.call(1) #=> ArgumentError