3

重複の可能性:
ラムダを使用する場合、Proc.newを使用する場合

(何度か質問されたことは知っていますが、満足のいく答えは見つかりませんでした)誰かがBlocks、Procs、Lambdasについて、そしてなぜ一方を他のものよりも優先して使用する必要があるのか​​、proc、類似、および/またはを使用する必要がある状況について説明してもらえますか?ラムダ。また、コンピュータのメモリにも影響があります。実例をお願いします。

4

1 に答える 1

7

RobertSosinskiのチュートリアルまたはChrisPineによるプログラムの学習をお試しください。

より多くの基礎については、RubyのWhy's(poignant)Guideを読むことをお勧めします。このガイドは、最近のRubyのProの多くを作成する責任があります。ぜひご覧ください!

JoeydeVillaによる説明

もう1つの重要ですが微妙な違いは、で作成されたprocとで作成されたprocがステートメントlambdaProc.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あります。

于 2012-07-20T14:29:17.250 に答える