[2014年学习计划之RoR系列] 第二步 – 熟悉Ruby语言 (2/n) Blocks and Iterators (代码块和迭代器)
2014-01-14 14:14
323 查看
[就算没有含金量,也请尊重原创, 转载自我的独立博客http://brucejia.net]
Blocks and Iterators (代码块和迭代器)
代码块和迭代器是Ruby语言中比较有特点的东西。先看代码块吧,如下面代码所示,代码块通常是由大括号({和}) 或者do/end包起来的一段代码。
建议:单行的block用大括号;多行的block用do/end
blocks可以用来实现回调函数和迭代器。
注意代码中的yield关键字。上边的代码产生结果如下:
Start of method
In the block
In the block
End of method
yield会调用跟方法(method)相关联的block,可以调用一次或多次。
当然block也可以带有自己的参数
调用的时候将参数传入给yield就好了。 - 这个时候yield看起来像个函数了。
动手试试看这两行代码会输出什么。
Blocks and Iterators (代码块和迭代器)
代码块和迭代器是Ruby语言中比较有特点的东西。先看代码块吧,如下面代码所示,代码块通常是由大括号({和}) 或者do/end包起来的一段代码。
1: { puts "Hello" } # this is a block
2: do ###
3: club.enroll(person) # and so is this
4: person.socialize #
5: end ###
建议:单行的block用大括号;多行的block用do/end
blocks可以用来实现回调函数和迭代器。
1: def call_block
2: puts "Start of method"
3: yield
4: yield
5: puts "End of method"
6: end
7:
8: call_block { puts "In the block" }
注意代码中的yield关键字。上边的代码产生结果如下:
Start of method
In the block
In the block
End of method
yield会调用跟方法(method)相关联的block,可以调用一次或多次。
当然block也可以带有自己的参数
1: call_block {|str, num| ... }
调用的时候将参数传入给yield就好了。 - 这个时候yield看起来像个函数了。
1: def call_block
2: yield("hello", 99)
3: end
动手试试看这两行代码会输出什么。
1: animals = %w( ant bee cat dog elk ) # create an array
2: animals.each {|animal| puts animal } # iterate over the contents
相关文章推荐
- [2014年学习计划之RoR系列] 第二步 – 熟悉Ruby语言 (2/n) Blocks and Iterators (代码块和迭代器)
- [2014年学习计划之RoR系列] 第二步 - 熟悉Ruby语言 (1/n)
- [2014年学习计划之RoR系列] 第二步 – 熟悉Ruby语言 (3/n)
- [2014年学习计划之RoR系列] 第一步 - 搭建开发环境
- 2013年到2014年学习计划及总结
- 学习mongo系列(五) AND,$or,$type
- 【cocos2d-x IOS游戏开发】2014年开发及学习计划:cocos2d-x视频专辑
- Data Blocks, Extents, and Segments( Content摘要系列一 )
- 2014年学习计划
- 2014年年度学习计划以及读书清单一览
- 对于学习ror的 半年的总结及下一年的计划
- ASP.NET MVC 3.0学习系列文章—NuGet and ASP.NET MVC 3.0
- python学习系列(六)迭代器生成器
- STL源码学习——迭代器(iterators)与traits编程技法
- Lua入门系列----pil学习笔记之Type and Values (2)
- CUDA系列学习(一)An Introduction to GPU and CUDA
- Lua入门系列----pil学习笔记之 Type and Values (1)
- CUDA系列学习(二)CUDA memory & variables - different memory and variable types
- CUDA系列学习(一)An Introduction to GPU and CUDA
- ES6学习——迭代器(Iterators):接口规范概述