ruby中的 Proc、block说明
来源:互联网 发布:淘宝外卖订餐网 编辑:程序博客网 时间:2024/05/22 10:29
存放代码片断
Proc可以将要执行的一些代码片断放在一起,却不立即执行,而是在后来我们想要执行它的时候来调用。
用Proc来组织我们的代码
Proc是组织代码的好工具,比如现在我们要测试一下某些代码的执行花费时间,通过Proc可以很灵活地做到这一点:
Blocks!
用Block来实现上面说的更方便,而且看起来漂亮一些:
那个yield就和a_proc.call类似,是作用block的一个点位符。
向Proc和Block中传递参数
向Proc和Block中传递参数的方式是一样的:
看一下这个例子
我们自己再来实现Array中的each方法
另外对于block,有两种形式
{}和do end 前者优先级高。
Proc可以将要执行的一些代码片断放在一起,却不立即执行,而是在后来我们想要执行它的时候来调用。
- say_hello = Proc.new { puts "Hello!" } # 代码不会立即执行
- say_hello.call # 现在我们来调用运行Proc的存放的代码
- # => "Hello!"
用Proc来组织我们的代码
Proc是组织代码的好工具,比如现在我们要测试一下某些代码的执行花费时间,通过Proc可以很灵活地做到这一点:
- def time(a_proc)
- start = Time.now
- a_proc.call
- puts Time.now - start
- end
- time(Proc.new { code_here })
- time(Proc.new { more_code_here })
Blocks!
用Block来实现上面说的更方便,而且看起来漂亮一些:
- def time
- start = Time.now
- yield
- puts Time.now - start
- end
- time { code_here }
- time { more_code_here }
那个yield就和a_proc.call类似,是作用block的一个点位符。
向Proc和Block中传递参数
向Proc和Block中传递参数的方式是一样的:
- def dumb_hello_world_test
- yield(5)
- end
- dumb_hello_world_test {|i| puts i * 2 }
- # => 10
- my_silly_proc = Proc.new {|name| puts name.upcase }
- my_silly_proc.call("August Lilleaas")
- # => "AUGUST LILLEAAS"
看一下这个例子
- [1, 2, 3].map {|i| puts i * 2 }
- # => 2
- # => 4
- # => 6
我们自己再来实现Array中的each方法
- class Array
- def each
- i = 0
- while(i < self.length) do
- yield(self[i])
- i += 1
- end
- end
- end
- my_array = ["a", "b", "c"]
- my_array.each {|letter| puts letter }
- # => "a"
- # => "b"
- # => "c"
另外对于block,有两种形式
{}和do end 前者优先级高。
转自:http://bot.iteye.com/blog/403075
0 0
- ruby中的 Proc、block说明
- Ruby 中的 block、proc、lambda
- ruby 中的Block,lambda,Proc
- Ruby 中的 block、proc、lambda
- ruby block & proc & lambda
- ruby的Proc和代码块(Block)
- Ruby中使用Block、Proc、lambda實現閉包
- ruby 的代码块 proc/lambda/method/block
- ruby中的block和迭代器
- ruby中的Proc类的理解
- Ruby Block
- What Is the Difference Between a Block, a Proc, and a Lambda in Ruby
- ruby Proc && Lambda
- Ruby Proc类
- Ruby中,next,break,return在block中的使用
- Ruby | Block和迭代器
- Amazing ruby: block & yield
- Ruby的Block
- shiro 简介 (三)
- JAVA字符串格式化-String.format()和MessageFormat的使用
- 表格table
- POJ 1287 Networking
- shiro 简介 (四)
- ruby中的 Proc、block说明
- Android init.c简析
- 第一个Ajax程序
- shiro 简介(五)
- OpenGL中的Alpha测试,深度测试,模板测试,裁减测试 .
- C++中的各种const总结
- Edit Distance
- 对一个deb包的解压、修改、重新打包全过程方法
- 线程锁的优化要考虑的方向