Ruby Proc 和 lambda的共同点和区别
Proc 和 lambda 的目的是把block {....} 变成类似方法一样的对象,使其不需要重复编写同样的block。
Proc 和 lambda 的共同点:
- 语法类似
Proc.new{|n| n**2}lambda{|n| n**2}
- 都可以用.call方法调用
hello_proc = Proc.new{ puts "Hello!" }
hello_proc.call #Hello!
hello_lambda = lambda{ puts "Hello!" }
hello_lambda.call #Hello! - 都可以用&关键字把各自转换为block
nums = [1,3,4,5,6]
cube_proc = Proc.new{ |n| n**3 }
cube_nums_proc = nums.map(&cube_proc) #[1,27,64...]cube_lambda = lambda{ |n| n**3 }
cube_nums_lambda = nums.map(&cube_lambda) #[1,27,64...] - 两者都是Object
Proc 和 lambda 的区别:
- lambda检查传入的参数,如果传入不正确的参数就throw an error; Proc 则不检查,即使传入不正确的参数也只会忽视它,并把nil赋值给结果(assign
nilto any that are missing.)。 - lambda返回时把控制权交还给它的调用函数,而Proc则不会交换。
def batman_ironman_proc
victor = Proc.new { return "Batman will win!" }
victor.call
"Iron Man will win!"
endputs batman_ironman_proc
def batman_ironman_lambda
victor = lambda { return "Batman will win!" }
victor.call
"Iron Man will win!"
endputs batman_ironman_lambda
输出结果====》Batman will win!
Iron Man will win!
Ruby Proc 和 lambda的共同点和区别的更多相关文章
- ruby中proc和lambda的return区别
学习ruby有一段时间了,但是我看了好几遍proc和lambda的return区别的区别讲解,始终没明白到底什么区别,今天上午又看,终于感觉是茅塞顿开有点领悟了 一下内容部分来自<<rub ...
- ruby中Block, Proc 和 Lambda 浅析
Block 与Proc的区别: Block是代码块,Proc是对象: 参数列表中最多只能有一个Block, 但是可以有多个Proc或Lambda; Block可以看成是Proc的一个类实例. Proc ...
- Ruby中Block, Proc, 和Lambda
Block Blocks就是存放一些可以被执行的代码的块,通常用do...end 或者 {}表示 例如: [1, 2, 3].each do |num| puts num end [1, 2, 3]. ...
- 浅谈sql 、linq、lambda 查询语句的区别
浅谈sql .linq.lambda 查询语句的区别 LINQ的书写格式如下: from 临时变量 in 集合对象或数据库对象 where 条件表达式 [order by条件] select 临时变量 ...
- &和&&的共同点和区别、Java字符含义和Java创建对象的几种方式
一.&和&&的共同点和区别 1.&和&&的联系(共同点): &和&&都可以用作逻辑与运算符,但是要看使用时的具体条件来决定. 操 ...
- python和ruby:一些需要注意的小区别。
python和ruby的一些区别 基础区别 运算符号/和// ruby只有/符号.它根据操作的数字类型返回对应的结果.如果数字的类型是int,则返回整除结构,如果是float,则返回float类型的计 ...
- RTSP、 RTMP、HTTP的共同点、区别(转)
共同点: 1:RTSP.RTMP.HTTP都是在应用层. 2:理论上RTSP.RTMP.HTTP都可以做直播和点播,但一般做直播用RTSP.RTMP,做点播用HTTP.做视频会议的时候原来用SIP协议 ...
- Ruby Proc类
Proc类 生成 Proc.new() {...} proc {...} 注,代码块参数带用 |..., *array| 获得后续参数的数组 lamda {...} call呼出时会 ...
- localStorage和sessionStorage的共同点和区别
共同点: 1.localStorage和sessionStorage都是用来存储客户端临时信息的对象. 2.他们均只能存储字符串类型的对象. 3.不同浏览器无法共享localStorage或sessi ...
随机推荐
- 汉澳sinox通过ndis执行windows驱动程序
汉澳sinox不仅能通过wine执行windows应用程序.还能通过ndis执行windows驱动程序 汉澳sinox使用 Windows NDIS 驱动程序 详细实现方法是用ndisgen把wind ...
- 【嵌入式Linux+ARM】GPIO操作
1.GPIO介绍 GPIO(general purpose i/o ports)意思为通用输入/输出端口,通俗的说就是一些引脚. 我们可以通过它们输出高低电平 或 读入引脚的状态. s3c2440中有 ...
- 全卷积网络FCN详解
http://www.cnblogs.com/gujianhan/p/6030639.html CNN能够对图片进行分类,可是怎么样才能识别图片中特定部分的物体? (图像语义分割) FCN(Fully ...
- UFLDL教程(一)---稀疏自编码器
神经网络模型 简单的神经网络 前向传播 代价函数 对于单个例子 .其代价函数为: 给定一个包括m个例子的数据集,我们能够定义总体代价函数为: 以上公式中的第一项 是一个均方差项. 第二项是一个规则化 ...
- 猫猫学IOS(二)UI之button操作 点击变换 移动 放大缩小 旋转
不多说,先上图片看效果,猫猫分享.必须精品 原创文章.欢迎转载.转载请注明:翟乃玉的博客 地址:viewmode=contents">http://blog.csdn.net/u013 ...
- python 字符串前缀
普通字符串 一般字符串都是已unicode编码,且和C类似,可以使用\来转义,比如 a = "test\ntest" print(a) 输出 test test 前面加r 在字符串 ...
- postgres SQL编译过程
PG启动首先完成主进程和后台进程的启动,启动时完成数据库文件的打开,共享内存的建立等.接着,所有SQL都会启动1个单独的进程处理SQL的执行过程. 新的进程首先是进行自身的初始化,最主要的是初始化内存 ...
- 关于使用openfiler作为共享存储来安装rac时的问题
关于使用openfiler作为共享存储来安装rac时的问题 第一:一定要使用openfiler-2.3-x86-disc1.iso这个版本号的openfiler,不要使用其它版本号的openfiler ...
- Tomcat配置,Myeclipse破解和各种设置
转自:http://www.cnblogs.com/tyjsjl/archive/2006/11/14/2156111.html 根据tomcat来配置eclipse和MyEclipse结合使用起来, ...
- 格式转换至yuv422转 yuv420
//pYUV为422,yuv为420 /*ok! * brief:pyuv is yuv422sp srcIn, and yuv is yuv420p desOut */ int YUV422To4 ...