繁体   English   中英

Lambda 与 Proc 在内存和效率方面的比较

[英]Lambda vs Proc in terms of memory and efficiency

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

Lambdas 和 Procs 之间有几个区别。

  1. Lambda 具有所谓的“小回报”。 这意味着 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]

Proc 和 lambda 之间的差异主要与行为有关,Abraham 回答得更好,也可以在这里找到

旧答案谈到了 Block 如何比 lambda 快,如Ruby Monk:Ascent所解释和所示

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

然而,由于只有一个类来表示两个lambda表达式和特效,它很可能是它们占用的内存完全相同的量,而不管它们是如何实现的,并表示。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM