[就算没有含金量,也请尊重原创, 转载自我的独立博客http://brucejia.net]

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 (代码块和迭代器)的更多相关文章

  1. 6周学习计划,攻克JavaScript难关(React/Redux/ES6 etc.)

    作者:余博伦链接:https://zhuanlan.zhihu.com/p/23412169来源:知乎著作权归作者所有.商业转载请联系作者获得授权,非商业转载请注明出处. 和大家一样,最近我也看了Jo ...

  2. [javase学习笔记]-8.7 静态代码块

    这一节我们看一个比較特殊的概念,那就是静态代码块. 前面我们也提到过代码块,就是一段独立的代码空间.那么什么是静态代码块呢?说白了,就是用statickeyword修饰的代码块. 我们来看一个样例: ...

  3. 2014总结&2015计划

    2014总结&2015计划 今天是2015/1/1,新的一年终于到来了,昨天老板要求提交2014的工作总结和2015的工作计划,正好提醒我,要总结和计划了. 先回顾2014年初的计划: 新年计 ...

  4. [转]Android系统Surface机制的SurfaceFlinger服务简要介绍和学习计划

    转自:Android系统Surface机制的SurfaceFlinger服务简要介绍和学习计划 前面我们从Android应用程序与SurfaceFlinger服务的关系出发,从侧面简单学习了Surfa ...

  5. [转] Android资源管理框架(Asset Manager)简要介绍和学习计划

    转自:http://blog.csdn.net/luoshengyang/article/details/8738877 Android应用程序主要由两部分内容组成:代码和资源.资源主要就是指那些与U ...

  6. Android资源管理框架(Asset Manager)简要介绍和学习计划

    文章转载至CSDN社区罗升阳的安卓之旅,原文地址:http://blog.csdn.net/luoshengyang/article/details/8738877 Android应用程序主要由两部分 ...

  7. Android窗口管理服务WindowManagerService的简要介绍和学习计划

    在前一个系列文章中,我们从个体的角度来分析了Android应用程序窗口的实现框架.事实上,如果我们从整体的角度来看,Android应用程序窗口的 实现要更复杂,因为它们的类型和作用不同,且会相互影响. ...

  8. Android应用程序窗口(Activity)实现框架简要介绍和学习计划

    文章转载至CSDN社区罗升阳的安卓之旅,原文地址:http://blog.csdn.net/luoshengyang/article/details/8170307 前面我们学习了SurfaceFli ...

  9. Android系统Surface机制的SurfaceFlinger服务简要介绍和学习计划

    文章转载至CSDN社区罗升阳的安卓之旅,原文地址:http://blog.csdn.net/luoshengyang/article/details/8010977 前面我们从Android应用程序与 ...

随机推荐

  1. Mac 10.12原生方法对NTFS分区进行读写的配置

    说明:不一定有效,最简单的方法就是不用NTFS,直接FAT32,对于大文件就用切割. 方法: 1.确定U盘名称 diskutil list ls /Volumes/ 2.比如我找到的U盘名称为Unti ...

  2. pull强制覆盖本地

    今天我总结的是在项目中经常用到的Git命令,上传和下拉文件. 当然在进行上传和下拉操作之前,你首先要做的就是将本地和Git库连接起来. 连接命令: git remote add origin + 你G ...

  3. 【Qt开发】QTime类

    QTime类为用户提供一系列时间的函数,封装的很全面,几乎满足了各种时间的需求. 常用方法介绍 1.QTime addMSecs(int ms) const 当前时间增加毫秒,ms可为负 2.QTim ...

  4. JavaScript数据结构-9.循环链表

    <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...

  5. <数据挖掘导论>读书笔记11异常检测

    异常检测的目标是发现与大部分其他对象不同的对象.通常,异常对象被称作离群点(Outlier). 异常检测也称偏差检测(Deviation detection),因为异常对象的属性值明显偏离期望的或者常 ...

  6. ansible 回调函数处理

    https://www.u3v3.com/ar/1421 https://serversforhackers.com/c/running-ansible-2-programmatically

  7. jquery 选择唯一值 选择器“”非“用法

    $(document).ready(function () { $("#addwork").hide(); $(".xi").click(function(){ ...

  8. select2 下拉搜索 可编辑可搜索 / 只可搜索

    官网 (http://select2.github.io/examples.html) <!--引入select2需要的文件--> <script type="text/j ...

  9. 对datatable添加数据

    DataTable dt = new DataTable(); dt.Columns.Clear(); dt.Columns.Add("事故发生时间"); dt.Columns.A ...

  10. ASP.NET 中HttpRuntime.Cache缓存数据

    最近在开始一个微信开发,发现微信的Access_Token获取每天次数是有限的,然后想到缓存,正好看到微信教程里面推荐HttpRuntime.Cache缓存就顺便看了下. 写了(Copy)了一个辅助类 ...