Ruby 之 Block, Proc, Lambda 联系--区别,转载
Ruby 之 Block, Proc, Lambda
Block
Block 不是对象,是Ruby的语言特性,近似于闭包(Closure)。
范例:
def meth
res= yield
"Block called returns #{res}"
end
puts meth do next “next_value” end #Block called returns next_value
puts meth do break “break_value” end # break_vcowcuo错误哦alue
def my
meth do return “reutnr_value” end
end
puts my () # return_value
红色部分就是 Block.
block 之 next
block中的 next [value] 导致 block结束,并返回[value]给调用函数。
block 之 break
block中的 break [value] 导致 block结束,并导致调用block的函数也返回,返回值是[value]。
block 之 return
block中的 return [value] 导致 block结束,并导致定义block的函数返回,返回值是[value]。
Proc
Proc 是Ruby 对 block的面向对象的封装。
范例:
def meth (&proc)
res= proc.call
"Proc called returns #{res}"
end
puts meth do next “next_value” end #Proc called returns next_value
puts eth do break “break_value” end # 出错
def my
meth do return “reutnr_value” end
end
puts my () # return_value
红色部分就是 Proc.
Proc 之 next
Proc中的 next [value] 导致 Proc结束,并返回[value]给调用函数。
block 之 break
Proc中不能使用break,这回导致异常。
block 之 return
Proc中的 return [value] 导致 Proc结束,并导致定义Proc的函数返回,返回值是[value]。
Lambda
Lambda 是Ruby 对 Proc进一步的封装。
范例:
def meth (&proc)
res= proc.call
"Lambda called returns #{res}"
end
def my
meth (&lambda do return “reutnr_value” end)
end
puts my () # Lambda called returns return_value
红色部分就是 Lambda.
Lambda 和 Proc的区别就在 Lambda中的 return 导致 lambda 函数结束,并返回调用lamdad的函数(Proc和Block都是从定义的它们的函数放回)
Block,Proc,Lambda的区别总结
- Block 中 用next从自身返回,用break从调用它的函数中返回, 用 returnc从定义它的函数中返回;
- Proc 是对Block的面向对象封装,不支持breaky用法 ;
- lambda是对Proc的封装, Lambda中return等同于next;
转载于:https://www.cnblogs.com/ToDoToTry/archive/2011/08/14/2137897.html
Ruby 之 Block, Proc, Lambda 联系--区别,转载相关推荐
- Day11 - Ruby的block,proc,lamdba方法比较
前情提要: 第11天开始,要更深入Ruby的精髓! Ruby经典面试题目#11 Ruby的block,proc,lamdba方法比较?What's difference between blocks, ...
- display:inline、block、inline-block的区别以及该死的ie6兼容问题
2019独角兽企业重金招聘Python工程师标准>>> display:block就是将元素显示为块级元素. block元素的特点是: 总是在新行上开始: 高度,行高以及顶和底边距都 ...
- display:inline、block、inline-block的区别
display:block就是将元素显示为块级元素. block元素的特点是: 总是在新行上开始: 高度,行高以及顶和底边距都可控制: 宽度缺省是它的容器的100%,除非设定一个宽度 <div& ...
- .NET 的 WCF 和 WebService 有什么区别?(转载)
.NET 的 WCF 和 WebService 有什么区别?(转载) [0]问题: WCF与 Web Service的区别是什么? 和ASP.NET Web Service有什么关系? WCF与ASP ...
- postfix中recipient/client/sender/helo四者的区别转载
postfix在main.cf中用下面四个做限制,那么这四者到底有什么区别? smtpd_recipient_restrictions smtpd_client_restrictions smtpd_ ...
- ruby include require load extend 的区别
ruby include require load extend 的区别 -–require/load-- 在功能上require和load都是用来导入文件的. 区别如下: require 用来加载库 ...
- jquery和javascript的区别(转载自脚本之家)
jquery 就对javascript的一个扩展,封装,就是让javascript更好用,更简单,为了说明区别,下面与大家分享下JavaScript 与JQuery 常用方法比较 jquery 就对j ...
- Ruby的.nil? .empty? .blank? .present?区别
.nil? , .empty? .blank? .present?区别: .nil? 和 .empty? 是ruby的方法. .blank? 是rails的方法. .nil? 判断对象是否存在(nil ...
- perl python ruby_perl,lua,python,ruby的对比(3) -- lambda,closure,proper tail function call
今天的题目是函数,先看一下匿名函数. Perl里是这样的 $f = sub{ return $_[0]+$_[1]+$_[2]; }; print &$f(1,2,3)."\n&qu ...
最新文章
- Win 10 源码一览:0.5T 代码、400 万文件、50 万文件夹
- Android handler
- java多线程编程同步方法_实践【Java多线程编程核心技术】系列:同步方法造成的无限等待...
- UA MATH567 高维统计II 随机向量8 图的max-cut问题 0.5近似算法
- [原创]IrrLicht的GUI使用
- webapp开发学习--Ionic+Cordova 环境搭建
- vb 获取系统声音的电平_专业音响系统中常见问题,看看你懂几个?
- 突发!王思聪名下房产、汽车、存款等被查封
- treeselect 如何选中多个_转pdf后出现word没有的形状——对象选择窗格(同时选择多个形状、图形)...
- x86_64平台编译链接汇编程序
- 连不上网_技术丨电脑连不上网,我要如何冲浪?
- [引]符号的英文说法
- matlab 矢量化编程(三) —— 软阈值函数
- 感应(异步)电机磁场定向控制电流环PI控制参数设计
- [算法导论] 邮递员问题代码c++实现,Floyd算法+dp,求遍历所有边回到起点的最短路径
- 破解 Linux 管理员密码
- 模拟京东快递单号查询框
- LuoguP3356 火星探险问题(费用流)
- 负载均衡集群技术介绍
- win10驱动开发4——加载/卸载驱动