Ruby Proc类
2015-10-16 15:51
405 查看
Proc类
Proc类就是能使块对象化的类
proc.new
hello = Proc.new do |name| puts "hello, #{name}" end hello.call("wanglei")
以上代码结果为:
hello, wanglei
利用Proc.new方法,或者对proc方法制定快,都可以穿件代码块的Proc对象。
通过调用Proc.call方法执行块。
lambda
与Proc.new、proc一样,lambda也可以创建对象,但是通过lambda创建的Proc行为会更接近方法。第一个不同点,lambda的参数数量的检查更加严密,对用Proc.new创建的Proc对象调用call方法时,call方法的参数数量与块变量的数量可以不同。但通过lambda创建Proc对象,如果参数数量不正确,程序就会产生错误。
prc1 = Proc.new do |a, b, c,| p [a, b, c] end prc1.call(1, 2) #=>[1, 2, nil] prc2 = lambda do |a, b, c| p [a, b, c] end prc2.call(1, 2) #=>错误
第二个不同点,lambda可以使用return将值从块中返回。
通过Proc参数接收块
def total2(from, to, &block) sum = 0 from.upto(to) do |i| if block sum += block.call(i) else sum += i end end return sum end p total2(1, 10) p total2(1, 10) {|i| i**2}
以上结果为:
55
395
Proc特征
虽然Proc对象可以作为匿名函数或方法使用,但它并不只是单纯的对象化。def counter c = 0 Proc.new do c += 1 end end c1 = counter p c1.call # 1 p c1.call # 2 p c1.call # 3 c2 = counter p c2.call # 1 p c2.call # 2 p c1.call # 4
Proc类的实例方法
prc.call()prc[]
prc.yield()
prc.()
prc === arg
上述方法都执行Proc对象prc
相关文章推荐
- ruby on rails
- Ruby正则表达式
- Ruby模块Module
- Ruby文件的输入与输出
- Ruby on Rails bundle install 缺失模块安装
- RubyGems 镜像 - 淘宝网 Ruby 国内镜像 解决 Ruby Gem 需要翻墙
- Ruby -reverse',upcase' & '.downcase'
- Ruby - length
- Ruby -puts and print
- 每个程序员都应该学习使用Python或Ruby
- 如何在Mac上安装Ruby
- Ruby 变量
- 关于CocoaPod无法升级以及无法下载第三方库和Cocoapods在OS X 10.11系统上的无法正常使用的问题
- ActiveAdmin安装
- [No000011]Ruby之attr_reader,attr_writer,attr_accessor理解&用法
- 如何在Mac OS X上安装 Ruby运行环境
- Ruby 的环境搭建及安装
- Ruby
- [No000010]Ruby 中一些百分号(%)的用法小结
- 从后端到页面:如何全方位监控 Ruby 应用?