無名関数を生成する
Rubyにおける無名関数の正体はProc
オブジェクトである。Proc
オブジェクトの生成には、kernel#.lambda
、Kernel#.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