Lambda vs Proc在内存和效率方面

时间:2013-08-14 00:54:57

标签: ruby lambda proc

我知道应该使用Procs和lambdas的不同情况(lambda检查参数数量等),但是它们会占用不同的内存量吗?如果是这样,哪一个更有效?

3 个答案:

答案 0 :(得分:7)

Lambdas和Procs之间存在一些差异。

  1. Lambdas拥有所谓的“小额回报”。这意味着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 lambda"
    
  2. Lambdas会检查传递给它们的参数数量,而Procs则不会。例如:

    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]
    

答案 1 :(得分:0)

Proc和lambda之间的差异主要与行为有关,并且亚伯拉罕更好地回答并且也被发现here

旧答案谈到Block如何比Ruby Monk:Ascent

所解释和显示的lambda更快

答案 2 :(得分:0)

Ruby语言规范没有为procs和lambdas规定任何特定的实现策略,因此任何实现都可以自由选择它想要的任何策略,因为任何实现都可能(或可能不)占用完全不同的内存量。实际上,这不仅适用于lambdas和procs,而且适用于每种类型的对象。 Ruby语言规范规定了对象的行为,它规定任何特定的实现或表示。

但是,由于只有一个类来表示两个 lambdas和procs,因此很可能它们会占用相同数量的内存,无论如何它们得到实施和代表。