我知道在不同的情况下应该使用 Procs 和 lambdas(lambda 检查参数的数量等),但是它们占用的内存量是否不同?如果是这样,哪个更有效?
问问题
564 次
3 回答
8
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 会检查传递给它们的参数数量,而 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]
于 2013-08-14T01:05:38.717 回答
0
Ruby 语言规范没有为 procs 和 lambdas 规定任何特定的实现策略,因此任何实现都可以自由选择它想要的任何策略,因此任何实现可能(或可能不会)占用完全不同的内存量。实际上,这不仅适用于 lambdas 和 procs,而且适用于每一种对象。Ruby 语言规范只规定了对象的行为,它没有规定任何特定的实现或表示。
但是,由于只有一个类可以同时表示lambda 和 proc,因此它们很可能占用完全相同的内存量,而不管它们是如何实现和表示的。
于 2013-08-14T10:07:53.963 回答
0
Proc 和 lambda 之间的差异主要与行为相关,Abraham 回答得更好,也可以在此处找到
旧答案谈到了 Block 如何比 lambda 更快,如Ruby Monk:Ascent中所解释和所示
于 2013-08-14T01:04:19.163 回答