脚本之家,脚本语言编程技术及教程分享平台!
分类导航

Python|VBS|Ruby|Lua|perl|VBA|Golang|PowerShell|Erlang|autoit|Dos|bat|

服务器之家 - 脚本之家 - Ruby - ruby 流程控制 方法

ruby 流程控制 方法

2020-04-08 20:55ruby教程网 Ruby

这章我们将讨论更多的Ruby 流程控制 . case 我们用case语句测试有次序的条件.正如我们所见的,这和C,Java的switch相当接近,但更强大. ruby i=8 rubycasei |when1,2..5 |print1..5\n |when6..10 |print6..10\n |end 6..10 ni

这章我们将讨论更多的Ruby流程控制.

case

我们用case语句测试有次序的条件.正如我们所见的,这和C,Java的switch相当接近,但更强大.

ruby>i=8

ruby>casei

|when1,2..5

|print"1..5 "

|when6..10

|print"6..10 "

|end

6..10

nil

2..5表示2到5之间的一个范围.下面的表达式测试i是否在范围内:

(2..5)===i

case内部也是用关系运算符===来同时测试几个条件.为了保持ruby的面对对象性质,===可以合适地理解为出现在when条件里的对

象.比如,下面的代码现在第一个when里测试字符串是否相等,并在第二个when里进行正则表达式匹配.

ruby>case'abcdef'

|when'aaa','bbb'

|print"aaaorbbb "

|when/def/

|print"includes/def/ "

|end

includes/def/

nil

while

虽然你将会在下一章发现并不需要经常将循环体写得很清楚,但Ruby还是提供了一套构建循环的好用的方法.

while是重复的if.我们在猜词游戏和正则表达式中使用过它(见前面的章节);这里,当条件(condition)为真的时候,它围绕一个代码域以

whilecondition...end的形式循环.但while和if可以很容易就运用于单独语句:

ruby>i=0

0

ruby>print"It'szero. "ifi==0

It'szero.

nil

ruby>print"It'snegative. "ifi<0

nil

ruby>print"#{i+=1} "whilei<3

1

2

3

nil

有时候你想要否定一个测试条件.unless是if的否定,until是一个否定的while.在这里我把它们留给你实验.

Therearefourwaystointerrupttheprogressofaloopfrominside.First,breakmeans,asinC,toescapefromthe

loopentirely.Second,nextskipstothebeginningofthenextiterationoftheloop(correspondingtoC'scontinue).

Third,rubyhasredo,whichrestartsthecurrentiteration.ThefollowingisCcodeillustratingthemeaningsofbreak,

next,andredo:

有四种从内部中断循环的方法.第一,和C一样break从循环中完全退出.第二,next跳到下一次循环迭代的开始(对应于C的continue).第

三,Ruby有redo,它可以重新开始现在的迭代.下面是用C代码对break,next,redo的意义做了演示:

while(condition){

label_redo:

gotolabel_next;/*ruby's"next"*/

gotolabel_break;/*ruby's"break"*/

gotolabel_redo;/*ruby's"redo"*/

...

...

label_next:

}

label_break:

...

第四种方法是由循环内跳出的方法是returen.return的结果是不仅从循环中跳出,而且会从含循环的方法中跳出.如果有参数,它会返回给方法调用,不然就返回nil.

for

C程序员现在会想知道怎样做一个"for"循环.Ruby的for比你想象的要有趣一点.下面的loop由集合中的元素控制运行:

foreltincollection

...

end

集合可以是一个数集(也是传统意义上的for循环):

ruby>fornumin(4..6)

|printnum," "

|end

4

5

6

4..6

也可以是其它的什么类型的集合,比如一个数组:

ruby>foreltin[100,-9.6,"pickle"]

|print"#{elt} (#{elt.type}) "

|end

100(Fixnum)

-9.6(Float)

pickle(String)

[100,-9.6,"pickle"]

但我们说过头了.for其实是each的另一写法,正巧,这是我们关于迭代器的第一个例子.下面的两种形式是等价的:

#Ifyou'reusedtoCorJava,youmightpreferthis.

foriincollection

...

end

#ASmalltalkprogrammermightpreferthis.

collection.each{|i|

...

}

一旦你熟悉了迭代器,它便会常常代替传统的循环.它们一般更容易处理.因此,让我们接着学习更多关于迭代器的知识.

延伸 · 阅读

精彩推荐
  • Ruby剖析 Ruby 访问控制

    剖析 Ruby 访问控制

    前面,我们说 Ruby 没有函数,只有方法.而且实际上有不止一种方法.这一节我们介绍 访问控制 (accesscontrols). 想想当我们在最高层而不是在一个类的定义里定义...

    ruby教程网3572020-04-08
  • RubyRuby简洁学习笔记(一):字符串、数字、类和对象

    Ruby简洁学习笔记(一):字符串、数字、类和对象

    这篇文章主要介绍了Ruby简洁学习笔记(一):字符串、数字、类和对象,本文是学习笔记第一篇,需要的朋友可以参考下 ...

    脚本之家2472020-04-20
  • RubyCentOS中配置Ruby on Rails环境

    CentOS中配置Ruby on Rails环境

    经过一个上午的折腾,终于把ROR环境在CentOS中搞定,绕了很多弯路,把文章写下来总结一下 ...

    可乐加糖4762020-04-12
  • RubyRuby设计模式编程中使用Builder建造者模式的实例

    Ruby设计模式编程中使用Builder建造者模式的实例

    这篇文章主要介绍了Ruby设计模式编程中使用Builder建造者模式的实例,建造者模式将一个复杂对象的构造与它的表示分离,使同样的构建过程可以创建不同的表...

    范孝鹏2192020-05-07
  • RubyRuby迭代器的7种技巧分享

    Ruby迭代器的7种技巧分享

    这篇文章主要介绍了Ruby迭代器的7种技巧分享,Ruby中的迭代器非常人性化,本文既是讲解了7个技巧也是讲解了7种迭代器,需要的朋友可以参考下 ...

    脚本之家4782020-04-20
  • RubyRuby环境下安装使用bundler来管理多版本的gem

    Ruby环境下安装使用bundler来管理多版本的gem

    这篇文章主要介绍了Ruby环境下安装使用bundler来管理多版本的gem的方法,举了Ruby On Rails中的应用实例来进行演示,需要的朋友可以参考下 ...

    日拱一卒4332020-05-10
  • RubyRuby进行文件信息输出实例代码

    Ruby进行文件信息输出实例代码

    Ruby进行文件信息输出实例代码,数据是随机的,所以每次的记录都会不同。 ...

    ruby教程网2962020-04-10
  • Ruby简要说明Ruby中的迭代器

    简要说明Ruby中的迭代器

    这篇文章主要介绍了Ruby中的迭代器,迭代器的概念在动态语言的编程中十分重要,文章中介绍了Ruby中的each迭代器和collect迭代器,需要的朋友可以参考下 ...

    goldensun2772020-04-25