Ruby中使用Block、Proc、lambda实现闭包
闭包(Closure),是指未绑定到任何对象的自由代码,闭包中的代码与任何对象和全局变量无关,只与执行此段代码的上下文相关。
今天我们简要的看一下ruby中的闭包实现。
Ruby中的闭包实现有:Block,Proc,Lambada。
首先,我们来看Block。
ary=[1,2,3,4]
ary.collect!do|a|
a*a
end
ary.eachdo|a|
putsa
end
这段代码,我们使用了Array对象的block方法,将ary中的每个元素平方一把。从例子中我们可以看到block使用起来很方便,想必传统的Java以及C编码,省略掉了冗余的循环,让你更加专注业务代码,这也是ruby的好处之一。
使用block的最大好处就是可以省略重复的冗余的无用的代码,我们再来看一个读文件的例子:
#fileblock
File.open(__FILE__)do|f|
putsf.readlines
end
对比我们用Java代码来读文件,每次都很反感那个冗长的try-catch-finally。从上面的ruby代码中我么可以看到,ruby语言给你做了处理,通过block你可以不用写无用的系统代码了。
从上面的例子我们可以看到,Ruby中的Block对开发者来说,不用再写那些冗余无用的系统代码,而是更加专注业务代码,提升开发效率。
其次,我们再看Proc。
如果你经常使用Block,你会发现一个问题:代码中会有很多重复的Block,比如好多地方需要打印文件内容。怎么解决呢?你第一个想到的是写一个公共函数,不错,可以解决。但是记住你使用的是ruby语言,不要重新造轮子。Ruby提供了函数化的Block:Proc。
我们看一个简单的Proc例子:
#fileblockwithProc
p=Proc.new{|f|putsf.readlines}
File.open(__FILE__,&p)
上面例子可以看到,将Block代码定义为一个Proc对象,然后在使用Block的地方用Proc替换,这样就做到了完美的代码复用。
最后我们看看lambda。
Lambda是一种表达式的名称,ruby中可以通过lambda表达式创建Proc对象。我们先看例子:
#fileblockwithProccreatedwithlambda
new_p=lambda{|f|putsf.readlines}
File.open(__FILE__,&new_p)
上面例子中,我们使用系统的lambda方法创建了一个Proc对象,其效果与Proc.new创建出来的是一样的。其实使用lambda与使用Proc.new效果是一样的,只不过lambda是一种标准的方法,其他语言如Python也支持,因此ruby中也支持了。
相关文章
- 为了避免内存攻击,美国国家安全局提倡Rust、C#、Go、Java、Ruby 和 Swift,但将 C 和 C++ 置于一边
- 开心档-软件开发入门之Ruby 数组(Array)
- Debian 8 使用 Apache 部署 Ruby on Rails
- 应用Linux下启动Ruby应用的指南(linux启动ruby)
- 21个Ruby编程技巧
- 红宝石(Ruby)史话
- Ruby在Linux下的安装指南(rubylinux安装)
- Connecting Ruby to MySQL: A Comprehensive Guide for Developers(ruby连接mysql)
- Linux 更新Ruby:让你拥有更好的体验(linux 更新ruby)
- Ruby on Rails 与 Redis:构建高效的应用程序(rails redis)
- 玩转Redis:Ruby快速安装指南(redisruby安装)
- Ruby环境下Redis的快速安装(ruby redis安装)
- 什么是ruby和Ruby概述
- ruby对象的初始化方法
- Ruby魔法学习笔记之一
- Ruby取得指定月日期数的方法
- ruby实现的插入排序和冒泡排序算法
- Ruby学习笔记一
- Ruby学习笔记二帮助生成Vim添加代码头的代码
- Ruby中Hash的11个问题解答
- Ruby和Shell脚本实现判断成绩及格功能
- Ruby简洁学习笔记(一):字符串、数字、类和对象
- Ruby实现的一个强大的批量删除文件脚本分享
- Ruby中用线程实现经典的生产者消费者问题代码实例