Ruby学习笔记-循环与选择结构

一、循环结构

1.    for…in语句:

Ruby提供的for...in语句主要用于迭代数组和Hash对象中的元素,与其它语言的for

语句有一定的差距,语法格式:

       for val  in  Array | Hash | Range [do]

              #code

       End

----------------------------------------------------

迭代数组:

  for i in ['one','two','three'] do

      puts i

  end

迭代Hash对象:

       h = {1=>'aaa',2=>'bbb'}

      for i in h                                       

          puts i[0] .to_s + “ : ” +i[1].to_s

      end

OR

      for key,value in h                                          #指定多个循环变量

          puts key.to_s + ": "+ value.to_s

      end

------------------------------------------------------

另外,在Ruby中除了可以用for…in来迭代数组和Hash对象外,还可以用each方法来进行迭代:

   ['one','two','three'].each do |x|

puts x

   end

          ----------------------------------------

          {1=>'aaa',2=>'bbb'}.each do  |a,b|

                 puts a.to_s + ": " +b.to_s

         end 

Note:

1.       使用for…in语句时,每次只能取出一个数组元素,而不能一次取出多个。

2.       当for循环的代码全在一行上时不能省略掉do,否则会报错; 只有当for循环的代码在多行上时才可以省略掉do;

 

2.       Blocks:

在Ruby中有两种定义块的方法:do…end 和{…}

#do…end

[‘1’,’2’,’3’].each do

        |a,b,c|

               Puts(‘#{a},#{b},#{c}’)

end

# 大括号 {..}

[[1,2,3],[3,4,5],[6,7,8]].each{

 |a,b,c|

puts( "#{a}, #{b}, #{c}" )

}

Note: 不管我们用哪种方式定义一个块,我们都必须确保’do’或’{’要和each关键字放在同一行上,否则会出现语法错误

 

3.       While语句:

这个和其它语言差别不大,没什么好说的,语法格式如下:

while condition [do]

        #code

end

       or   

       code while condition

在这要提一下的是上面的第二种定义,代码会先执行一次然后在进行判断。如果我们想用这种方式执行很多句代码,可以把它们放在begin和end之间:

       begin

              code1

              code2

        end while condition

      

Note: 当一个块被在begin和end之间时(如上),那么这段代码到少会执行一次,其它格式定义的while循环里面的代码可能执行0或多次;

       x=100

begin

            puts("x=#{x}")

end while(x<100)                        #output:x=100

puts ("-------------------")

y=100

puts("y=#{y}") while(y<100)              #无输出

 

4.       until语句

until语句与while语句作用正好相反,当条件表达式返回结果为假时执行循环体,直到

条件表达式为true为止,语法格式:

until condition [do]

       #code

end

unitl语句的功能完全可以由wihle语句来实现,大多数其它语言中也没有until语句,感觉用起来容易出错,本人还是喜欢用while;

 

5.       Loop 语句

这是Ruby中提供的一个内建的最基本的迭代器,它可以执行循环功能,它会对指定代

码进行无限次的循环,除非使用break语句跳出循环,语法格式:

       loop{

       #code

}

Or

loop do

       #code

end

 

二、选择结构

1.       If…Then…Else/If…:…then(可以用冒号代替Then)

if x == 1 then puts( 'ok' ) end # with 'then'

if x == 1 : puts( 'ok' ) end # with colon

if x == 1 puts( 'ok' ) end # syntax error!代码在一行时不能省略then

 

2.       And…Or…Not/&&…||…!

Ruby中有两种方式来判定一个布尔表达式的值是true/false,但是这两种操作符不是完

全等价的,比如他们的计算优先级别就不一样,&&/||/!的优先级别要高些,所以一般用的时候尽量不要将这两种操作符混合起来用;

if 1==2 and 2==3 or (||)3==3

   puts('hello')  

end

Or

if 1==2 && 2==3 || 3==3

   puts('world')  

end

 

3.       Unless

该语句与if语句作用正好相反,当条件表达式返回结果为假时,计算then关键字后的代

码片段,与if语句不同的是,unless语句中不能使用elsif语句,因些不能处理多分支的程序流程,语法格式如下:

       unless  condition [then]

              #code1

       [else

#code2    ]

       end

 

4.       Case Statements

在Ruby中,将case关键字后表达式的值与各个常量进行比较时,使用的是”===”比较运算符,这就是说when关键安后的常量可以是一个Range对象, 此时只要case后的表达式的值在Range内,就可以执行相应的when后的代码片段了; 语法格式:

case [表达式]

[when 常量1 [,常量2] [,常量] then

        #code1

]

[when 常量1 [,常量2] [,常量] then

        #code2

]

[else

        #code3

]

end

在case语句中,将case关键字后的表达式的值依次与when后的多个常量进行比较,一但相等,则执行对应的when语句块中的代码片段;

case(i)

        when 1: puts(“It’s Monday”)

        when 2: puts(“It’s Tuesday”)

        when 3: puts(“It’s Wednesday”)

       when 4: puts(“It’s Thursday”)

        when 5: puts(“It’s Friday”)

        when (6..7): puts(“It’s the weekend!”)

        else puts(“error”)

end 

OR

case(i)

        when 1

 puts(“It’s Monday”)

        when 2

puts(“It’s Tuesday”)

        when 3

puts(“It’s Wednesday”)

        when 4

puts(“It’s Thursday”)

        when 5

puts(“It’s Friday”)

        when (6..7)

puts(“It’s the weekend!”)

        else

puts(“error”)

end 

另外,当匹配成功后我们不需要为输入break语句来退出case语句,在Ruby中,一量匹配成功,case语句会自动跳出。

时间: 2024-08-01 23:59:10

Ruby学习笔记-循环与选择结构的相关文章

Ruby学习笔记_索引贴

学习Ruby也有段时间了,在学习的同时也做了些笔记并发到了园子睐.看到园子里的大虾们在出了一系列文章后都会做个索引贴,这样很方便,所以本人今天抽了个空就把它整理了下,方便自己的同时也方便感兴趣的朋友.   Ruby学习笔记目录: 1.Ruby入门 2.Ruby-循环与选择结构 3.Ruby-String 4.Ruby-Array 5.Ruby-Hash 6.Ruby-Block, Proc and Lambda 7.Ruby-正则表达式 8.Ruby-Symbol 9.Ruby-Method,C

ruby学习笔记(11)--symbol与hash参数

symbol是啥就不深入的讨论了,只简单说说symbol的好处 ruby内部对于每个对象,都会有一个数字id用来标识并区分,可以用xxx.object_id来查看 puts "0001".object_id puts "0001".object_id puts "0001".object_id puts "0001".object_id 输出结果类似如下: 32088750320887303208871032088690 可以

Ruby学习笔记

Ruby语言中,以对象为基本单位,可以说所有的元素都是对象.按照之前对于面向对象程序的理解,对象是指包含了特定属性和方法集合的一组程序.对象由类来定义,具体的表现为对象实例.也就是说,对象是类的实例化[2]. Ruby语言的基础元素 对象:数值对象.字符串对象.正则表达式对象.时间对象.文件对象.目录对象.数组.哈希.例外对象等 数值对象      由于Ruby中一切数据都是对象,所以我们处理的数字实际上也是对象.      a = 10,这样一个简单的赋值语句,实际上应当理解为 a = Num

ruby学习笔记(1)--初识语法

虽然ruby/ruby on rails从2007年就一直获奖无数,但身为一个中国人,一直对小日本创造的东西不怎么感兴趣,想想其实也没必要,技术本身是无国界的,日本其实也有值得学习的地方(扯远了,呵) 单从技术而言,ruby本身确实很爽,令程序员的工作变得轻松有趣! 下面的代码演示了如何找出100以内的素数: using System; namespace Mersenne { class Program { static void Main(string[] args) { for (int

ruby学习笔记(2)--类的基本使用

ruby语言跟c#的一些重要差别在于: 1.ruby是动态语言,c#是静态语言--即对象在new出来以后,ruby还可以动态给对象实例添加一些属性或方法(javascript也是如此) 2.ruby中刻意弱化了变量类型这个概念,默认情况下变量/方法都不需要声明具体(返回)类型,但其实在ruby内部,会自动根据变量的值分配类型.(可以通过 "puts 变量.class"查看) 3.ruby相对c#来讲,可能有些雷的地方在于:父类中的private成员,居然是可以在子类中使用的! ...其

Ruby学习笔记之Ruby 对象

大部分 Ruby 程序,它们的设计,逻辑,动作,都是围绕着对象进行的.写一个 Ruby 程序,主要的工作就是去创建对象,然后给它们能力,让它们可以去执行动作. Ruby 是 OOP 语言,就是面向对象的语言,你执行的计算,数据处理,输入与输出这些动作,都是通过创建对象,然后让这个对象去执行指定的动作来完成的.对象(object)在现实世界里,就是一个东西.一个苹果是一个对象,一张桌子也是一个对象. 每个对象是一个特定的类的实例(instance),对象的行为大部分是在它们所属的那个类上面定义的方

Ruby学习笔记之Ruby 模块

介绍一种跟类相似的构造:模块(module).在设计程序的时候,我们会把大的组件分割成小块,你可以混合与匹配对象的行为. 跟类差不多,模块也捆绑方法与常量.不一样的是,模块没有实例.你可以把拥有特定功能的模块放到类或某个特定的对象里使用. Class 这个类是 Module 类的一个子类,也就是所有的 class 对象应该也是一个 module 对象. 上午10:26 *** 创建与使用模块 上午10:26 *** module MyFirstModule   def say_hello   p

Ruby学习笔记二 使用Ruby实现通过Proxy的方式请求网页

现在很多网站上某些活动都有限制同一IP只能投一票的规定,但是有时候迫于 压迫,又不得不想办法多投几票,以前是采用Apache里的HttpClient来实现这些功 能,日前正在看Ruby,就用它也来玩下: require 'net/http' ##获得网页内容 def query_url(url) return Net::HTTP.get(URI.parse(url)); end #抓取cnproxy上所有的代理列表,并将结果保存到proxy.txt中去 #你可以修改这块代码或者其他的代理服务器列

Ruby学习笔记一 安装Ruby与Ruby的爬虫应用

最近终于空下来了,所以下个Ruby玩玩,安装Ruby很简单,去官网下载一个一键 安装包既可,linux下的安装,大家Google下就有很多教程了.对于IDE网上说 NetBeans支持得很完美,但是因为本人比较喜欢Eclipse,所以还是跟大家推荐 EasyEclipse for Ruby and Rails,当然你可以选择只下RoR的插件而不弄个全新 的Eclipse. 以前一直在用Java写爬虫工具抓图片,对HttpClient包装,正则表达式处理那 个是累啊,就算弄好了工具类,有时候一会又