一、循环结构
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
(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}" )
- }
3. While语句:
这个和其它语言差别不大,没什么好说的,语法格式如下:
- while condition [do]
- #code
- end
- ----------or------------------------
- code while condition
- begin
- code1
- code2
- end while condition
- x=100
- begin
- puts("x=#{x}")
- end while(x<100) #output:x=100
- puts ("-------------------")
- y=100
- puts("y=#{y}") while(y<100) #无输出
until语句与while语句作用正好相反,当条件表达式返回结果为假时执行循环体,直到 条件表达式为true为止,语法格式:
- until condition [do]
- #code
- end
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
该语句与if语句作用正好相反,当条件表达式返回结果为假时,计算then关键字后的代 码片段,与if语句不同的是,unless语句中不能使用elsif语句,因些不能处理多分支的程序流程,语法格式如下:
- unless condition [then]
- #code1
- [else
- #code2 ]
- end
在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