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から抜けている