时间:2021-05-22
这章我们将讨论更多的Ruby流程控制.
case
我们用case语句测试有次序的条件.正如我们所见的,这和C,Java的switch相当接近,但更强大.
ruby>i=8
ruby>casei
|when1,2..5
|print"1..5\n"
|when6..10
|print"6..10\n"
|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\n"
|when/def/
|print"includes/def/\n"
|end
includes/def/
nil
while
虽然你将会在下一章发现并不需要经常将循环体写得很清楚,但Ruby还是提供了一套构建循环的好用的方法.
while是重复的if.我们在猜词游戏和正则表达式中使用过它(见前面的章节);这里,当条件(condition)为真的时候,它围绕一个代码域以
whilecondition...end的形式循环.但while和if可以很容易就运用于单独语句:
ruby>i=0
0
ruby>print"It'szero.\n"ifi==0
It'szero.
nil
ruby>print"It'snegative.\n"ifi<0
nil
ruby>print"#{i+=1}\n"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;
gotolabel_break;
gotolabel_redo;
...
...
label_next:
}
label_break:
...
第四种方法是由循环内跳出的方法是returen.return的结果是不仅从循环中跳出,而且会从含循环的方法中跳出.如果有参数,它会返回给方法调用,不然就返回nil.
for
C程序员现在会想知道怎样做一个"for"循环.Ruby的for比你想象的要有趣一点.下面的loop由集合中的元素控制运行:
foreltincollection
...
end
集合可以是一个数集(也是传统意义上的for循环):
ruby>fornumin(4..6)
|printnum,"\n"
|end
4
5
6
4..6
也可以是其它的什么类型的集合,比如一个数组:
ruby>foreltin[100,-9.6,"pickle"]
|print"#{elt}\t(#{elt.type})\n"
|end
100(Fixnum)
-9.6(Float)
pickle(String)
[100,-9.6,"pickle"]
但我们说过头了.for其实是each的另一写法,正巧,这是我们关于迭代器的第一个例子.下面的两种形式是等价的:
#Ifyou'reusedtoCorJava,youmightpreferthis.
foriincollection
...
end
#ASmalltalkprogrammermightpreferthis.
collection.each{|i|
...
}
一旦你熟悉了迭代器,它便会常常代替传统的循环.它们一般更容易处理.因此,让我们接着学习更多关于迭代器的知识.
声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。
和Java、PHP等语言不一样,sh的流程控制不可为空,如(以下为PHP流程控制写法):
Java流程控制Java流程控制的语法与C/C++类似,也有if...else、while、do...while、for、switch...case等,这里不再
Lua提供了if语句和ifelse语句作为流程控制语句,当然,符合C的特点,流程语句之间可以实现嵌套操作,当然流程控制也可以和循环体结合进行控制。1、if语句i
程序流程控制结构和方法程序流程控制结构分为:顺序、选择、循环以及异常处理结构。语句是程序的基本组成单位。在java中分简单语句和符合语句,简单语句就是一行代码,
流程控制无非就是ifelse之类的控制语句,今天我们来看一下Python中的流程控制会有什么不太一样的地方。while语句python中的while语句和其他语