重複の可能性:
ラムダを使用する場合、Proc.newを使用する場合
(何度か質問されたことは知っていますが、満足のいく答えは見つかりませんでした)誰かがBlocks、Procs、Lambdasについて、そしてなぜ一方を他のものよりも優先して使用する必要があるのか、proc、類似、および/またはを使用する必要がある状況について説明してもらえますか?ラムダ。また、コンピュータのメモリにも影響があります。実例をお願いします。
重複の可能性:
ラムダを使用する場合、Proc.newを使用する場合
(何度か質問されたことは知っていますが、満足のいく答えは見つかりませんでした)誰かがBlocks、Procs、Lambdasについて、そしてなぜ一方を他のものよりも優先して使用する必要があるのか、proc、類似、および/またはを使用する必要がある状況について説明してもらえますか?ラムダ。また、コンピュータのメモリにも影響があります。実例をお願いします。
RobertSosinskiのチュートリアルまたはChrisPineによるプログラムの学習をお試しください。
より多くの基礎については、RubyのWhy's(poignant)Guideを読むことをお勧めします。このガイドは、最近のRubyのProの多くを作成する責任があります。ぜひご覧ください!
JoeydeVillaによる説明
もう1つの重要ですが微妙な違いは、で作成されたprocとで作成されたprocがステートメントlambda
をProc.new
処理する方法にあります。return
lambda
-created procでは、ステートメントreturn
はproc自体からのみ返されますProc.new
-created procでは、return
ステートメントはもう少し驚くべきものです。procからだけでなく、procを囲むメソッドからも制御を返します。lambda
これが-createdprocの動作return
です。それはおそらくあなたが期待する方法で動作します:
def whowouldwin
mylambda = lambda {return "Freddy"}
mylambda.call
# mylambda gets called and returns "Freddy", and execution
# continues on the next line
return "Jason"
end
whowouldwin
=> "Jason"
これがProc.new
-createdprocreturn
が同じことをしているところです。Rubyが驚き最小の原則を破るケースの1つを目にするところです。
def whowouldwin2
myproc = Proc.new {return "Freddy"}
myproc.call
# myproc gets called and returns "Freddy",
# but also returns control from whowhouldwin2!
# The line below *never* gets executed.
return "Jason"
end
whowouldwin2
=> "Freddy"
この驚くべき振る舞い(およびタイピングの減少)のおかげで、私はprocを作成するときに使用lambda
することを好む傾向がProc.new
あります。