• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • vbs
  • DOS/BAT
  • hta/htc
  • python
  • perl
  • VBA
  • ColdFusion
  • ruby
  • PowerShell
  • Lua
  • Golang
  • linux shell
您的位置:首页 > 脚本语言 >ruby > Ruby中Block和迭代器的使用讲解

Ruby中Block和迭代器的使用讲解

作者:goldensun 字体:[增加 减小] 来源:互联网

goldensun 通过本文主要向大家介绍了ruby block,ruby,ruby rose,ruby什么意思,max and ruby等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com

我们来简单地描述Ruby的一个独特特性。Block,一种可以和方法调用相关联的代码块,几乎就像参数一样。这是一个不可思议的功能强大的特性。

可以用Block实现回调(但它比Java的匿名内部(anonymous inner)类更简单),传递一组代码(但它远比c的函数指针灵活),以及实现迭代器。

Block只是在花括号或者do...end之间的一组代码。

{puts "Hello"}             #this is a block

do                      ### 

 club.enroll(person)            #and so is this

 person.socialize              #

end                     ###

</div>

为什么有两种分界符?部分原因是有人觉得有时候用一种分界符比另外一种感觉更自然。另外一部分原因是它们有不同的优先级:花括号比do/end绑定的更紧密些。我们尝试遵循正在成为Ruby标准的一个约定俗成,单行block用花括号,多行block用do/end。

一旦创建了block,就可以与方法的调用相关联。把block的开始放在含有方法调用的源码行的结尾处,就可以实现关联。比如,在下面的代码中,含有puts "Hi" 的block与greet方法的调用相关联。

greet {puts "Hi"}

</div>

如果方法有参数,它们出现在block之前。

verbose_greet("Dave","loyal customer"){puts "Hi"}

</div>

然后使用Ruby的yield语句,方法可以一次或多次地调用(invoke)相关联的block。可以把yield想象成比如方法调用,它调用含有yield语句的方法所关联的block。

下面的例子显示了如何使用yield语句。定义了一个方法,它会调用yield两次。然后调用这个方法,把block放在同一行,在方法调用之后(并在方法的所有参数之后)。

def call_block

 puts "Start of method"

 yield

 yield

 puts "End of method"

end

call_block{puts "In the block"}

</div>

输出结果:

 Strat of method

 In the block

 In the block

 End of method

</div>

可以提供参数给yield的调用;参数会传递到block中。在block中,竖线(|)之间给出参数名来接受这些来自yield的参数。

 def call_block

  yield("Hello",99)

 end

 call_block {|str,num| ...}

</div>

在Ruby库中大量使用了block来实现迭代器;迭代器是从某种收集(collection)如数组中连续返回元素的方法。

animals = %w(ant bee cat dog elk)  #创建一个数组

animals.each{|animal| puts animal}  #迭代它的内容

</div>

输出结果:

ant

bee

cat

dog

elk

</div>

让我们看一下如何实现应用在前面例子中的Array类中的each迭代器。each迭代器循环处理数组中的元素,对每个元素调用yield。在伪码中,它可能写成:

#在Array类中......

def each

 for each element         #<--无效的Ruby语句

  yield(element)

 end

end

</div>

许多内建于c和java等语言的循环结构在Ruby中只是方法调用,这些方法会零次或多次地调用相关联的block。

['cat','dog','horse'].each{|name| print name," "}

5.times {print "*"}

3.upto(6){|i| print i}

('a'..'e').each{|char| print char}

</div>

输出结果:

cat dog horse *****3456abcde

</div>

上面的代码要求对象5 五次调用block;然后要求对象3调用一个block,并传入一个连续的值,直到这个值到达6为止。最后对a到e的字符区间(range),使用each方法调用block。

</div>

您可能想查找下面的文章:

  • 深入理解Ruby中的代码块block特性
  • Ruby中Block和迭代器的使用讲解
  • 深入讲解Ruby中Block代码快的用法
  • 深入理解Ruby中的block概念
  • 深入理解Ruby中的block概念
  • Ruby中的block、proc、lambda区别总结

相关文章

  • 深入讲解Ruby中Block代码快的用法
  • 编写Ruby代码注释时需要注意的一些问题
  • ruby开发vim插件小结
  • ruby 异常处理:rescue
  • 采用UTF-8解决Ruby on Rails程序的中问题
  • 举例理解Ruby on Rails的页面缓存机制
  • 关于Ruby on Rails路由配置的一些建议
  • 编写Ruby脚本来对Twitter用户的数据进行深度挖掘
  • 用Ruby实现一个单元测试框架的教程
  • Ruby简明教程之判断语句介绍

文章分类

  • vbs
  • DOS/BAT
  • hta/htc
  • python
  • perl
  • VBA
  • ColdFusion
  • ruby
  • PowerShell
  • Lua
  • Golang
  • linux shell

最近更新的内容

    • Ruby编程中的命名风格指南
    • Ruby中操作字符串的一些基本方法
    • 详解Ruby on Rails中的mailer相关使用
    • Ruby中的异常处理代码编写示例
    • Windows下ruby语言安装教程
    • Ruby基础知识之方法、代码段
    • Ruby中常用的字符串处理函数使用实例
    • Ruby升级后no such file to load -- readline解决办法
    • Ruby中区分运行来源的方法
    • Ruby基础知识之数据类型

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有