Proc和Lambda的区别

本文深入探讨了Ruby语言中Proc和Lambda的区别。Proc是绑定到一组局部变量的代码块,可以在不同上下文中调用并访问这些变量;而Lambda则检查传递的参数数量,其内部的return仅影响Lambda自身而不影响外部调用者。
Proc和Lambda的区别在网上没找到能说明白的文字

写写我自己的理解吧以免得忘记了还要再想

D:\>qri Proc
------------------------------------------------------------ Class: Proc
+Proc+ objects are blocks of code that have been bound to a set of
local variables. Once bound, the code may be called in different
contexts and still access those variables.


D:\>qri lambda
---------------------------------------------------------- Kernel#lambda
proc { |...| block } => a_proc
lambda { |...| block } => a_proc
------------------------------------------------------------------------
Equivalent to +Proc.new+, except the resulting Proc objects check
the number of parameters passed when called.


Proc和lambd都相当于定义一个代码块,然后这个代码块可以在需要用到的时候通过call(x,y,*z)来唤醒,但是他们的区别在于Proc中的代码影响到当前调用它的方法,而lambd中的代码只会在自己的代码块中起作用,如下一个广为传播的例子能够解释,我这里引用一下.

def foo
f = Proc.new { return "return from foo from inside proc" }
puts f.call #call的时候已经执行了return,所以foo方法执行完毕
return "return from foo"#不会执行到这一句
end


def bar
f = lambda { return "return from lambda" ;puts "continue?"}
puts f.call #return只在(lambda)f这个块中返回,它后面这句puts "continue?"不会执行到
return "return from bar"#这句话还会执行到,因为lambda中的return并没有影响到bar方法
end


puts foo 

输出
return from foo from inside proc

puts bar

输出
return from lambda
return from bar
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值