superclass=Object
type=class
library=_builtin
extended=
included=

֥å򥳥ƥ(ѿΥפ䥹å
졼)ȤȤ˥֥Ȳ³֥ȤǤ

Proc  ѿΥפƳʤȤ
̾ΤʤؿΤ褦˻Ȥޤʥߥåѿ
Proc ѿȤƻȤޤ

Proc ѿΥפݻƤ뤳Ȥϰʲ
ѿ var 򻲾ȤǤƤ뤳Ȥ狼ޤ

  var = 1
  $foo = Proc.new { var }
  var = 2
  
  def foo
    $foo.call
  end
  
  p foo       # => 2

===[a:should_use_next] ³Ǥ֤ͤ

³֥ȤǤơƽФ(ƤӽФ֥åǤ yieldʳǤ [[m:Proc#call]])
إפ֤ͤˤ next Ȥޤbreak  return ǤϤޤ

:

  def foo
    f = Proc.new{
      next 1
      2
    }
  end
  
 p foo().call       #=> 1

===[a:block] Proc ֥Ȥ֥åդ᥽åɸƤӽФ˻Ȥ

֥åդ᥽åɤФ Proc ֥Ȥ `&' ꤷϤ
ƤӽФ֥åΤ褦ưޤ
̩ˤϰʲΰ㤤ޤ
ϡProc ֥ȤƤӽФ֥åȤƿ񤦺ݤ¤Ǥ

  # ʤ
  (1..5).each { break }

  # LocalJumpError ȯޤ
  pr = Proc.new { break }
  (1..5).each(&pr)         


===[a:lambda_proc] lambda  proc  Proc.new ȥƥ졼ΰ㤤

[[m:Kernel.#lambda]]  [[m:Proc.new]] Ϥɤ [[c:Proc]] 饹Υ󥹥(³֥)ޤ
줿³֥ȤϤĤξ̤ǵưۤʤޤ lambda ³֥ȤΤۤ
᥽åɤ˶ᤤƯ򤹤褦߷פƤޤ

[[m:Kernel.#proc]]  Proc.new Ʊˤʤޤ
 & դ뤳ȤǼ³֥Ȳ֥åϡProc.new 줿
Ʊˤ褦˿񤤤ޤ

==== ΰ

lambda Τۤ긷̩ǤοäƤȡʥ᥽åɤΤ褦ˡ˥顼ˤʤޤ
Proc.new ϰ¿˶ᤤ򤷤ޤ

:

  b1 = Proc.new{|a,b,c| 
    p a,b,c 
  }
  b1.call(2, 4)
  #=> 2
      4
      nil
  
  b2 = lambda{|a,b,c| 
    p a,b,c 
  }
  b2.call(2, 4)  
  #=> wrong number of arguments (2 for 3) (ArgumentError) 

[[ref:d:spec/call#block_arg]] ⻲ȤƤ

==== ׹ʸεưΰ㤤

return  break ϡlambda  Proc.new Ǥϵưۤʤޤ
㤨 return Ԥä硢lambda Ǥϼ³֥ȼȤȴޤ 
Proc.new Ǥϼ³֥ȤϤ᥽åɤȴޤ

:

 def foo
   f = Proc.new { return :foo }
   f.call 
   return 
 end
 
 def bar
   f = lambda { return :bar }
   f.call 
   return 
 end
 
 def h
   yield
 end
 
 def hoge
   h{ return :hoge }
   nil
 end

 p foo()  #=> :foo
 p bar()  #=> nil
 p hoge() #=> :hoge

ʲɽϡ³֥Ȥμ¹ԤƱ褦ˡ³֥Ȥ줿Τ
Ʊ᥽åǹԤäη̤Ǥ

                 return                          next                        break
  Proc.new   ᥽åɤȴ            ³֥Ȥȴ   㳰ȯ
  proc       ᥽åɤȴ            ³֥Ȥȴ   㳰ȯ
  lambda     ³֥Ȥȴ  ³֥Ȥȴ   ³֥Ȥȴ
  ƥ졼 ᥽åɤȴ            ³֥Ȥȴ   ᥽åɤȴ



===[a:orphan] orphan ʼ³֥Ȥεư

Proc ᥽åɤæФ塢³֥Ȥ
return, break
㳰 [[c:LocalJumpError]] ȯޤ
Ǥ̤ lambda ³֥Ȥϥ᥽åɤƱ褦˿
ȤտޤƤ뤿ᡢ㳰 [[c:LocalJumpError]] ȯޤ

:

  def foo
    Proc.new { return }
  end

  foo.call
  # => in `call': return from proc-closure (LocalJumpError)


ʲɽϡ³֥Ȥμ¹ԤƱ褦ˡ³֥Ȥ줿᥽åɤ
æФƤԤäη̤Ǥ

                 return                          next                        break
  Proc.new   㳰ȯ              ³֥Ȥȴ   㳰ȯ
  proc       㳰ȯ              ³֥Ȥȴ   㳰ȯ
  lambda     ³֥Ȥȴ  ³֥Ȥȴ   ³֥Ȥȴ
