建站极客
脚本专栏 ruby专题 正文
ruby 流程控制 方法
所属分类:
脚本专栏 / ruby专题
阅读数:
609
收藏 0
赞 0
分享
这章我们将讨论更多的Ruby流程控制. case 我们用case语句测试有次序的条件.正如我们所见的,这和C,Java的switch相当接近,但更强大. ruby> i=8 ruby> case i | when 1, 2..5 | print "1..5\n" | when 6..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 "aaa or bbb\n" | when /def/ | print "includes /def/\n" | end includes /def/ nil while 虽然你将会在下一章发现并不需要经常将循环体写得很清楚,但 Ruby 还是提供了一套构建循环的好用的方法. while 是重复的 if.我们在猜词游戏和正则表达式中使用过它(见前面的章节);这里,当条件(condition)为真的时候,它围绕一个代码域以 while condition...end的形式循环.但 while 和 if 可以很容易就运用于单独语句: ruby> i = 0 0 ruby> print "It's zero.\n" if i==0 It's zero. nil ruby> print "It's negative.\n" if i<0 nil ruby> print "#{i+=1}\n" while i<3 1 2 3 nil 有时候你想要否定一个测试条件. unless 是 if 的否定, until 是一个否定的 while.在这里我把它们留给你实验. There are four ways to interrupt the progress of a loop from inside. First, break means, as in C, to escape from the loop entirely. Second, next skips to the beginning of the next iteration of the loop (corresponding to C's continue). Third, ruby has redo, which restarts the current iteration. The following is C code illustrating the meanings of break, next, and redo: 有四种从内部中断循环的方法.第一,和C一样break从循环中完全退出.第二, next 跳到下一次循环迭代的开始(对应于C的 continue ).第 三,Ruby有redo,它可以重新开始现在的迭代.下面是用 C 代码对break,next,redo的意义做了演示: while (condition) { label_redo: goto label_next; /* ruby's "next" */ goto label_break; /* ruby's "break" */ goto label_redo; /* ruby's "redo" */ ... ... label_next: } label_break: ... 第四种方法是由循环内跳出的方法是 returen. return的结果是不仅从循环中跳出,而且会从含循环的方法中跳出.如果有参数,它会返回给方法调用,不然就返回nil. for C程序员现在会想知道怎样做一个"for"循环.Ruby的for比你想象的要有趣一点.下面的loop由集合中的元素控制运行: for elt in collection ... end 集合可以是一个数集(也是传统意义上的for循环): ruby> for num in (4..6) | print num,"\n" | end 4 5 6 4..6 也可以是其它的什么类型的集合,比如一个数组: ruby> for elt in [100,-9.6,"pickle"] | print "#{elt}\t(#{elt.type})\n" | end 100 (Fixnum) -9.6 (Float) pickle (String) [100, -9.6, "pickle"] 但我们说过头了.for其实是 each 的另一写法,正巧,这是我们关于迭代器的第一个例子.下面的两种形式是等价的: # If you're used to C or Java, you might prefer this. for i in collection ... end # A Smalltalk programmer might prefer this. collection.each {|i| ... } 一旦你熟悉了迭代器,它便会常常代替传统的循环.它们一般更容易处理.因此,让我们接着学习更多关于迭代器的知识.
Ruby中常用的字符串处理函数使用实例 这篇文章主要介绍了Ruby中常用的字符串处理函数使用实例,本文总结了Ruby中最常用的字符串处理函数,如返回字符串的长度、判断字符串中是否包含另一个串、字符串插入、字符串分隔、默认分隔符为空格等内容,需要的朋友可以参考下
评论 0
收藏 0
赞 0
分享
Windows下ruby语言安装教程 这篇文章主要介绍了Windows下ruby语言安装教程,本文使用rubyinstaller提供的安装包安装,并给出图文说明,非常简单,需要的朋友可以参考下
评论 0
收藏 0
赞 0
分享
ruby环境中自动编译sass教程 这篇文章主要介绍了ruby环境中自动编译sass教程,本文讲解了ruby环境的安装、sass环境的安装以及sass的常用编译命令使用示例,需要的朋友可以参考下
评论 0
收藏 0
赞 0
分享
Ruby中相等性判断的4种方法 这篇文章主要介绍了Ruby中相等性判断的4种方法,本文讲解了“==” 最常见的相等性判断、“===” 用于 case 语句的相容判断、“equal?” 相同对象判断、“eql?” 对象 hash 值判断等内容,需要的朋友可以参考下
评论 0
收藏 0
赞 0
分享
Ruby中的p和puts的使用区别浅析 这篇文章主要介绍了Ruby中的p和puts的使用区别浅析,本文用一个实例讲解了它们之间的区别,并总结出结论,需要的朋友可以参考下
评论 0
收藏 0
赞 0
分享
Ruby中的block、proc、lambda区别总结 这篇文章主要介绍了Ruby中的block、proc、lambda区别总结,本文讲解了yield 和 block call 的区别、block 和 proc、lambda 的区别、proc 和 lambda 的区别,需要的朋友可以参考下
评论 0
收藏 0
赞 0
分享
Ruby的运算符和语句优先级介绍 这篇文章主要介绍了Ruby的运算符和语句优先级介绍,本文先是给出了一些小例子来验证运算符和语句优先级,然后总结出一个优先级表,需要的朋友可以参考下
评论 0
收藏 0
赞 0
分享
查看更多