Ruby中Lambda和Procs之间的区别

我们知道如何在Ruby中声明lambda和proc吗?它们的实现几乎相同,并且都用于相同的目的。为了快速修订,Procs和Lambdas用于在变量内存储方法或逻辑集。您可以在代码中的任意位置调用该变量。但是它们之间存在一些差异。让我们看看它们之间的区别。

声明:

需要使用“ .new”方法来声明Procs,而只需编写关键字“ lambda”即可声明lambda。请参考以下示例并分析差异,

prc = Proc.new{|ele| puts ele*10}
lmbda = lambda {|ele| puts ele*10}
prc.call(12)
lmbda.call(34)

输出结果

120
340

参数计数

它们在参数计数的行为上也不同。Procs不计算参数,而lambda进行计数,这意味着,如果在lambda的调用方法中传递了错误数量的参数,则将不得不面对错误,而如果在procs中执行相同的操作,则将不会遇到任何错误。特殊情况。请参考下面给出的示例并分析代码,

prc = Proc.new do |ele,ele1,ele2,ele3| 
	puts ele+ele1+ele2*ele3
end

lmbda = lambda do|ele,ele1,ele2,ele3|
    puts ele*10+ele2+ele1+ele3
end

prc.call(12,11,22,23,66,77)
lmbda.call(34,34,2,4)

输出结果

529
380

说明:

在上面的代码中,您可以观察到在proc的调用方法中,我们传递了错误的参数数量,或者您可以说参数数量超出了proc的预期,但解释器没有给出任何错误,但是如果对于lambda,我们执行相同的操作,我们将不得不面对一个名为“错误的参数数量(给定5,预期为4):Argument error”的错误

退货行为

这是proc和lambda之间的主要区别。Procs的行为方式是,它将在找到任何return语句时从代码中明确退出,或者可以说,一旦找到return关键字,将停止进一步处理,而对于lambda则不是这种情况,它首先完成所有操作处理然后从块中退出。请参考下面给出的代码并分析差异。

def method1
  x = lambda { return }
  x.call
  p "Welcome to Nhooo.com from lambda"
end

def method2
  x = Proc.new { return }
  x.call
  p "Welcome to Nhooo.com from Procs"
end

method1
method2

输出结果

"Welcome to Nhooo.com from lambda"

在输出中,您可以看到仅由于proc找到了return语句而退出了lambda的字符串,并且退出了未处理的语句,所以退出了该字符串。