我们知道如何在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的字符串,并且退出了未处理的语句,所以退出了该字符串。