4

Procs とラムダを使用する必要があるさまざまな状況があることは理解していますが (ラムダは引数の数をチェックするなど)、メモリの量は異なりますか? もしそうなら、どちらがより効率的ですか?

4

3 に答える 3

8

Lambda と Procs にはいくつかの違いがあります。

  1. ラムダには、「小利回り」と呼ばれるものがあります。つまり、Lambda はそれを呼び出した関数にフローを返しますが、Proc はそれを呼び出した関数から戻ります。

     def proc_demo
       Proc.new { return "return value from Proc" }.call
       "return value from method"
     end
    
     def lambda_demo
       lambda { return "return value from lambda" }.call
       "return value from method"
     end
    
     proc_demo    #=> "return value from Proc"
     lambda_demo  #=> "return value from method"
    
  2. Lambda は渡されたパラメーターの数をチェックしますが、Proc はチェックしません。例えば:

     lambda { |a, b| [a, b] }.call(:foo)
     #=> #<ArgumentError: wrong number of arguments (1 for 2)>
    
     Proc.new { |a, b| [a, b] }.call(:foo)
     #=> [:foo, nil]
    
于 2013-08-14T01:05:38.717 に答える
0

Ruby 言語仕様は、proc とラムダの特定の実装戦略を規定していません。したがって、どの実装でも、必要な戦略を自由に選択できます。つまり、どの実装でも、まったく異なる量のメモリを使用する場合と使用しない場合があります。実際、これはラムダとプロシージャだけでなく、あらゆる種類のオブジェクトに当てはまります。Ruby 言語仕様は、オブジェクトの動作を規定するだけで、特定の実装や表現を規定していません。

ただし、ラムダとプロシージャの両方を表すクラスは1 つしかないため、実装方法と表現方法に関係なく、まったく同じ量のメモリを消費する可能性が非常に高くなります。

于 2013-08-14T10:07:53.963 に答える