[英]Lambda vs Proc in terms of memory and efficiency
我知道在不同的情况下应该使用 Procs 和 lambdas(lambda 检查参数数量等),但是它们占用的内存量是否不同? 如果是这样,哪一种更有效?
Lambdas 和 Procs 之间有几个区别。
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"
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.