Ruby流程控制应用技巧讲解

开发 开发工具
Ruby流程控制包括case语句,when if语句,以及for语句。我们会在文章中针对Ruby流程控制做一个详细的介绍,希望对大家有所帮助。

Ruby语言是一项完全面向对象的编程语言,通常被人们理解为解释型语言。我们今天在这里为大家讲解的是有关Ruby流程控制的一些应用方法。#t#

Ruby流程控制之case

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

  1. ruby> i=8   
  2. ruby> case i   
  3. | when 1, 2..5   
  4. | print "1..5\n"   
  5. | when 6..10   
  6. | print "6..10\n"   
  7. | end   
  8. 6..10   
  9. nil   

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

case 内部也是用关系运算符 === 来同时测试几个条件.为了保持ruby的面对对象性质, === 可以合适地理解为出现在 when 条件里的对
象.比如,下面的代码现在***个 when 里测试字符串是否相等,并在第二个 when 里进行正则表达式匹配.

  1. ruby> case 'abcdef'   
  2. | when 'aaa', 'bbb'   
  3. | print "aaa or bbb\n"   
  4. | when /def/   
  5. | print "includes /def/\n"   
  6. | end   
  7. includes /def/   
  8. nil   
  9. while  

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

Ruby流程控制之while 是重复的 if.

我们在猜词游戏和正则表达式中使用过它(见前面的章节);这里,当条件(condition)为真的时候,它围绕一个代码域以while condition...end的形式循环.但 while 和 if 可以很容易就运用于单独语句:

  1. ruby> i = 0   
  2. 0   
  3. ruby> print "It's zero.\n" if i==0   
  4. It's zero.   
  5. nil   
  6. ruby> print "It's negative.\n" if i<0   
  7. nil   
  8. ruby> print "#{i+=1}\n" while i<3   
  9. 1   
  10. 2   
  11. 3   
  12. nil   

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

有四种从内部中断循环的方法.

***,和C一样break从循环中完全退出.

第二, next 跳到下一次循环迭代的开始(对应于C的 continue ).

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

  1. while (condition) {   
  2. label_redo:   
  3. goto label_next; /* ruby's "next" */   
  4. goto label_break; /* ruby's "break" */   
  5. goto label_redo; /* ruby's "redo" */   
  6. ...   
  7. ...   
  8. label_next:   
  9. }   
  10. label_break:   
  11. ...  

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

Ruby流程控制之for

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

  1. for elt in collection   
  2. ...   
  3. end   

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

  1. ruby> for num in (4..6)   
  2. | print num,"\n"   
  3. | end   
  4. 4   
  5. 5   
  6. 6   
  7. 4..6   

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

  1. ruby> for elt in [100,-9.6,"pickle"]   
  2. | print "#{elt}\t(#{elt.type})\n"   
  3. | end   
  4. 100 (Fixnum)   
  5. -9.6 (Float)   
  6. pickle (String)   
  7. [100, -9.6, "pickle"]   

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

  1. # If you're used to C or Java, 
    you might prefer this.   
  2. for i in collection   
  3. ...   
  4. end   
  5. # A Smalltalk programmer 
    might prefer this.   
  6. collection.each {|i|   
  7. ...   
  8. }  

 以上就是Ruby流程控制的一些相关知识介绍。

责任编辑:曹凯 来源: jb51.net
相关推荐

2009-12-14 09:33:04

Ruby安装

2009-12-14 15:30:43

安装Ruby on R

2010-05-11 12:17:51

Unix awk

2017-05-31 17:09:52

LinuxShell命令

2009-12-15 10:23:23

Ruby应用技巧

2010-05-11 12:53:58

Unix awk

2009-12-16 14:40:14

Ruby控制结构

2009-02-19 10:13:00

远程控制服务器权限

2009-12-17 17:37:42

Ruby on Rai

2009-12-18 10:47:16

Ruby装饰模式

2021-05-27 05:27:22

流程控制Rust

2009-09-04 10:42:56

C#流程控制语句

2010-07-19 10:11:58

Perl流程控制语句

2009-12-11 17:57:13

PHP应用JSON

2009-12-15 18:03:46

Ruby连接数据库

2014-01-07 17:21:27

远程控制

2011-09-08 13:53:31

Node.js

2021-08-05 06:54:05

流程控制default

2013-12-13 15:48:52

Lua脚本语言

2011-08-24 16:36:00

T-SQL
点赞
收藏

51CTO技术栈公众号