[就算没有含金量,也请尊重原创, 转载自我的独立博客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. 用python开发了一个简单apache web服务端范例,在win10 + apache2.4.9 + python3.5 测试成功

    #!D:\Programs\Python\Python35-32\python.exe import cgi def htmlTop():     print("Content-type: ...

  2. DiagnosticFormatter

    关于这个类的继承体系如下: 1.DiagnosticFormatter类在com.sun.tools.javac.api包中,其定义如下: /** * Provides simple function ...

  3. hive-0.5.0安装出错

    在安装过程中,第一次启动Hive没有成功,后来在网上查到原因如下,并成功解决: 错误如下: Exception in thread "main" java.lang.NoClass ...

  4. 入门系列之使用fail2ban防御SSH服务器的暴力破解攻击

    欢迎大家前往腾讯云+社区,获取更多腾讯海量技术实践干货哦~ 本文由SQL GM发表于云+社区专栏 介绍 对于SSH服务的常见的攻击就是暴力破解攻击--远程攻击者通过不同的密码来无限次地进行登录尝试.当 ...

  5. springboot主从数据库

    是从springmvc的思路上来做的,主要就是配置主.从DataSource,再继承AbstractRoutingDataSource,重写determineCurrentLookupKey方法,通过 ...

  6. Betriebssystem

    1.Prozess 1.1 Das Begriff Der Prozess ist eine Entität der Aktivität,umfasst aktuell Aktivitäten,dur ...

  7. ubuntu 10.10 更新源

    deb http://mirrors.163.com/ubuntu/ maverick main universe restricted multiverse deb-src http://mirro ...

  8. Android studio--几个生成文件的区别:Make Project、Make Module、Build apk、Signed apk

    参考资料: https://stackoverflow.com/questions/35334319/difference-between-make-project-make-module-app-b ...

  9. ado.net中的 sqlconnection sqlcommand datareader dataset SqlDataAdapter之间的关系

    Connection: 和数据库交互,必须连接它.连接帮助指明数据库服务器.数据库名字.用户名.密码,和连接数据库所需要的其它参数.Connection对象会被Command对象使用,这样就能够知道是 ...

  10. WPF 用户控件嵌入网页

    WPF使用用户控件嵌入网页,直接使用WebBrowser或Frame会产生报错,报错信息如下: 1.使用WebBrowser,<WebBrowser Source="http://19 ...