ProcとLambdaの違い


ProcとLambdaの違いはネット上ではっきり言える文字が見つからなかった
自分の理解を書きなさい忘れないようにまた考えなければならない.
D:\>qri Proc
------------------------------------------------------------ Class: Proc
     +Proc+ objects are blocks of code that have been bound to a set of
     local variables. Once bound, the code may be called in different
     contexts and still access those variables.
D:\>qri lambda
---------------------------------------------------------- Kernel#lambda
     proc   { |...| block }  => a_proc
     lambda { |...| block }  => a_proc
------------------------------------------------------------------------
     Equivalent to +Proc.new+, except the resulting Proc objects check
     the number of parameters passed when called.

Procとlambdはいずれも1つのコードブロックを定義することに相当し、このコードブロックは必要に応じてcall(x,y,*z)を通じて起動することができるが、彼らの違いはProcのコードが現在の呼び出し方法に影響し、lambdのコードは自分のコードブロックでしか機能しないことであり、以下のように広く伝播する例で説明できるので、ここで引用する.
def foo
 f = Proc.new { return "return from foo from inside proc" }
 puts f.call #call        return,  foo      
 return "return from foo"#        
end
def bar
 f = lambda { return "return from lambda" ;puts "continue?"}
 puts f.call #return  (lambda)f      ,     puts "continue?"     
 return "return from bar"#        ,  lambda  return      bar  
end
puts foo 

しゅつりょく
return from foo from inside proc
puts bar

しゅつりょく
return from lambda
return from bar