Procオブジェクト
Procオブジェクト
メソッドのブロックを渡したオブジェクト。
callメソッドが呼ばれたときブロック内の処理を評価する。
proc_hi = -> { puts "hi" } proc_hi.call => "hi" # 引数を渡すとき proc_greeting = -> n{ puts n } proc_greeting.call("hi") => "hi" # Procオブジェクトを引数として渡す def greeting(p) p.call end greeting(proc_hi) => "hi" # 別の記法 proc_hi = Proc.new {puts 'hi'}
lambda
lambdaはブロックを渡すという点ではprocと同じだが、振る舞いがわずかに異なる。
lambda_hi = lambda { puts 'hi' }
lambdaの中のreturnではlambda自身から抜けるが、procの中のreturnではそのprocを含むメソッドから抜ける。
def method_proc prc = Proc.new { return 1} prc.call return 2 end def method_lambda lmd = lambda { return 1} lmd.call return 2 end puts method_proc # => 1 メソッドから抜けている puts method_lambda # => 2 lambdaから抜けている