Ruby入门之代码块、迭代子和过程对象

2016-02-19 18:38 27 1 收藏

今天图老师小编要向大家分享个Ruby入门之代码块、迭代子和过程对象教程,过程简单易学,相信聪明的你一定能轻松get!

【 tulaoshi.com - 编程语言 】


  在Ruby的一切都是一个对象。甚至一个代码块也是一个对象!在Ruby中,代码对象被称为代码块。你可以把代码块想像成小的程序单元。它们包含Ruby代码并且能够在执行它们时转入到方法中。在Python,C和Java中与之类似的概念是函数指针,匿名函数,内部类和回调函数。
  
  Ruby代码块的语法是,把Ruby代码放在大括号之间或放在do/end命令之间。如下所示:
  
  {
  #这是一个代码块...
  }
  do
  #...并且这也是一个代码块
  end
  在一个很简单的实例中,{puts"hello world"}就是一个有效的代码块。那么,你应该如何使用这些代码块并且把它们作为一组代码传递给一个方法呢?为此,首先要定义一个如下形式的简单方法:
  
  def someMethod
  yield
  end
  命令yield把控制传递给代码块(它被传递给这个方法)。下面的代码向你展示,一个代码块是如何被传递到上面这个方法的。
  
  irb(main):001:0 someMethod {puts "hello world"}
  hello world
  每当调用yield时,执行传递到该方法的代码块。下面是另一个更复杂些的方法的例子,它使用了一个代码块来做更多的工作。
  
  irb(main):001:0
  def fibonacci (stop)
  while stop 20
  stop=yield
  end
  end
  = nil
  irb(main):006:0
  i=0; j=1; fibonacci(j) {puts i; temp = i; i = j;j = temp + j}
  0
  1
  1
  2
  3
  5
  8
  代码块被应用于整个Ruby中。最重要的是,代码块被Ruby内部地应用于象Array,Hash,甚至String这样一些类的iterator方法中。一个代码块其实就是,你定义要执行什么任务(典型地,是针对一个元素的任务)。为了进一步说明代码块和iterator的使用,我们提供了一个小例子。假定你定义了一些场院动物类(如图3所示),还有一个这些动物的数组,你可以通过在这个数组上使用一个代码块和一个迭代子来实现让每一种动物发声。
  
  
  图3.简单的场院动物类
  irb(main):031:0
  barnYard = [Cow.new, DUCk.new, Chicken.new, Horse.new, Dog.new]
  = [#Cow:0x58d2f48, #Duck:0x58d2f30, #Chicken:0x58d2f00, #Horse:0x58d2ee8, #Dog:0x58d2ed0]
  irb(main):032:0
  barnYard.each {animal animal.talk}
  Mooooo
  Quack
  Cluck-cluck
  Naaaay
  Bark bark
  在barnYard上调用的每个方法正是一个数组上的iterator方法之一。注重,符号用于定义要接收的参考。在本例情况中,代码块接收一个参数;也就是把barnYard中的每一种动物作为迭代子来遍历这个动物集合。
  
  迭代子和代码块甚至答应我们完成如下一些相当简单和整洁的事情:
  
  irb(main):001:0
  3.times {puts "Ruby is cool!"}
  Ruby is cool!
  Ruby is cool!
  Ruby is cool!
  是的,即使是Integer类也提供了一个迭代子(times方法)-它使用一个代码块来快速地执行循环操作。
  
  在离开有关代码块和迭代子的讨论前,你还应该知道代码块可以被赋值给一个变量。事实上,这样的代码块实际上是Proc类的实例。你可以使用new方法来定义一个Proc实例,或者使用这些Proc实例-这些实例稍后可以使用call方法来调用。
  
  irb(main):003:0 simpleProc.call
  hello
  = nil
  irb(main):004:0 anotherProc.call("hello yourself")
  hello yourself
  = nil
  这答应一个可重用的代码块可以被包装为一个对象(它可以在任何地方执行)而进行传递。下面是显示Ruby中可重用代码的示例!
  
  irb(main):001:0
  def simpleMethod(aProc)
  puts "Is Ruby cool or what?"
  aProc.call("Way cool dude!")
  end
  = nil
  irb(main):005:0
  simpleMethod(anotherProc)
  Ruby酷不酷?相当不错!

来源:http://www.tulaoshi.com/n/20160219/1618452.html

延伸阅读
标签: ASP
  doface(原作) 提起ASP很多人就认为是一堆HTML脚本和被括在<%和%之中的一些代码还有就是一些JAVASCRIPT脚本等筹在一起的一些代码的集合,这样的代码,再加上各类的不同格式的注释,看起来就一个字:乱。也不管别人能不能看得懂,只要是能实现自己的目的就可以了,因为ASP的代码也是脚本,给了客户也不可能不被人看到其中的内容,...
标签: Web开发
静态页面 代码如下: !DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd" html xmlns="http://www.w3.org/1999/xhtml" head title无标题页/title script type="text/javascript" src="jquery/jquery.js" //这里不可以用script type="" src="" / /script sc...
标签: Web开发
 对象直接量提供了另一种创建新对象的方式。对象直接量允许将对象描述文字嵌入到JavaScript代码中,就像将文本数据嵌入在JavaScript代码中,就像将文本数据嵌入在JavaScript代码中作为引用的字符串一样。对象直接量是由属性说明列表构成的,这个列表包含在大括号之中,其中的属性说明用逗号隔开。对象直接量中的每个属性说明列表都由一个属...
标签: Web开发
转换案例: 获取JQUERY对象的方法 var jqueryObject = $("#test"); //jqeuryObject为一个Jquery对象,它可以使用jquery的所有方法但是不能使用 var jqueryObject = $("#test"); //jqeuryObject为一个Jquery对象,它可以使用jquery的所有方法但是不能使用 DOM对象的方法 var DOMObject = document.getElementById("test");//DOMObject为一...
摘  要 本文详细描述了在尝试使用极限编程在软件开发中的一个实现例子,在小步迭代开发中逐步的实现用例需要的功能,同时每个迭代都能集成实现的功能。关键字 极限编程 在一次项目开发中我们开发组遇到了一个需求,该需求的要使用的技术是我们所不熟悉的,就是说在开发过程中我们必须逐步的掌握该项技术,同时希望能够尽可能的保持代...

经验教程

214

收藏

71
微博分享 QQ分享 QQ空间 手机页面 收藏网站 回到头部