Ruby学习笔记-循环与选择结构_Ruby_编程开发_程序员俱乐部

中国优秀的程序员网站程序员频道CXYCLUB技术地图
热搜:
更多>>
 
您所在的位置: 程序员俱乐部 > 编程开发 > Ruby > Ruby学习笔记-循环与选择结构

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

 2011/12/20 10:54:24  clark1231  http://clark1231.iteye.com  我要评论(0)
  • 摘要:一、循环结构1.for…in语句:Ruby提供的for...in语句主要用于迭代数组和Hash对象中的元素,与其它语言的for语句有一定的差距,语法格式:forvalinArray|Hash|Range[do]#codeend----------------------------------------------------迭代数组:foriin['one','two','three']doputsiend迭代Hash对象:h={1=>'aaa',2=>'bbb'
  • 标签:笔记 学习 Ruby 学习笔记

一、循环结构
1.? ? for…in语句:
Ruby提供的for...in语句主要用于迭代数组和Hash对象中的元素,与其它语言的for语句有一定的差距,语法格式:

  1. for val??in??Array | Hash | Range [do]
  2. ? ?? ?? ?? ???#code
  3. end
----------------------------------------------------
迭代数组:
  1. for i in ['one','two','three'] do?
  2. ? ?? ?puts i
  3. ??end

  4. 迭代Hash对象:
  5. ? ?? ? h = {1=>'aaa',2=>'bbb'}
  6. ? ?? ?for i in h? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ??
  7. ? ?? ?? ? puts i[0] .to_s + “ : ” +i[1].to_s
  8. ? ?? ?end
  9. OR------------------------------------------
  10. ? ?? ?for key,value in h? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?#指定多个循环变量
  11. ? ?? ?? ? puts key.to_s + ": "+ value.to_s
  12. ? ?? ?end
------------------------------------------------------

另外,在Ruby中除了可以用for…in来迭代数组和Hash对象外,还可以用each方法来进行迭代:
  1. ['one','two','three'].each do |x|?
  2. ? ? puts x?
  3. end
  4. ?----------------------------------------
  5. {1=>'aaa',2=>'bbb'}.each do??|a,b|?
  6. ? ? ? puts a.to_s + ": " +b.to_s
  7. end ?
Note:
(1)使用for…in语句时,每次只能取出一个数组元素,而不能一次取出多个。
(2)当for循环的代码全在一行上时不能省略掉do,否则会报错; 只有当for循环的代码在多行上时才可以省略掉do;

2.? ?? ? Blocks:
在Ruby中有两种定义块的方法:
  1. do…end 和{…}
  2. #do…end
  3. [‘1’,’2’,’3’].each do? |a,b,c|
  4. ? ? ?Puts(‘#{a},#{b},#{c}’)
  5. end

  6. # 大括号 {..}?
  7. [[1,2,3],[3,4,5],[6,7,8]].each{??|a,b,c|?
  8. ? ? ?puts( "#{a}, #{b}, #{c}" )?
  9. }
Note: 不管我们用哪种方式定义一个块,我们都必须确保’do’或’{’要和each关键字放在同一行上,否则会出现语法错误

3.? ?? ? While语句:
这个和其它语言差别不大,没什么好说的,语法格式如下:
  1. while condition [do]
  2. ? ?? ???#code
  3. end
  4. ----------or------------------------ ???
  5. code while condition
在这要提一下的是上面的第二种定义,代码会先执行一次然后在进行判断。如果我们想用这种方式执行很多句代码,可以把它们放在begin和end之间:
  1. begin
  2. ? ? ?code1
  3. ? ? ?code2
  4. ?end while condition
Note: 当一个块被在begin和end之间时(如上),那么这段代码到少会执行一次,其它格式定义的while循环里面的代码可能执行0或多次;
  1. x=100
  2. begin?
  3. ? ? ?puts("x=#{x}")
  4. end while(x<100)? ?? ?? ?? ?? ?? ?? ?? ?#output:x=100
  5. puts ("-------------------")
  6. y=100
  7. puts("y=#{y}") while(y<100)? ?? ?? ?? ???#无输出
4.? ?? ? until语句
until语句与while语句作用正好相反,当条件表达式返回结果为假时执行循环体,直到条件表达式为true为止,语法格式:
  1. until condition [do]
  2. ? ?? ? #code
  3. end
unitl语句的功能完全可以由wihle语句来实现,大多数其它语言中也没有until语句,感觉用起来容易出错,本人还是喜欢用while;

5.? ?? ? Loop 语句
这是Ruby中提供的一个内建的最基本的迭代器,它可以执行循环功能,它会对指定代码进行无限次的循环,除非使用break语句跳出循环,语法格式:
  1. loop{
  2. ? ?? ? #code
  3. }
  4. -------------------or------------------------ ???
  5. loop do
  6. ? ?? ? #code
  7. 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,但是这两种caozuofu.html" target="_blank">操作符不是完全等价的,比如他们的计算优先级别就不一样,&&/||/!的优先级别要高些,所以一般用的时候尽量不要将这两种操作符混合起来用;
  1. if 1==2 and 2==3 or (||)3==3?
  2. ? ?puts('hello') ??
  3. end
  4. --------------------or------------------------ ???
  5. if 1==2 && 2==3 || 3==3
  6. ? ?puts('world') ??
  7. end
3.? ?? ? Unless
该语句与if语句作用正好相反,当条件表达式返回结果为假时,计算then关键字后的代码片段,与if语句不同的是,unless语句中不能使用elsif语句,因些不能处理多分支的程序流程,语法格式如下:
  1. unless??condition [then]
  2. ? ?? ?? ?? ???#code1
  3. ? ?? ? [else
  4. ? ? ? ? ? ? ? ?#code2? ? ]
  5. ?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语句块中的代码片段;
  1. case(i)
  2. ? ?? ???when 1: puts(“It’s Monday”)
  3. ? ?? ???when 2: puts(“It’s Tuesday”)
  4. ? ?? ???when 3: puts(“It’s Wednesday”)
  5. ? ?? ? when 4: puts(“It’s Thursday”)
  6. ? ?? ???when 5: puts(“It’s Friday”)
  7. ? ?? ???when (6..7): puts(“It’s the weekend!”)
  8. ? ?? ???else puts(“error”)
  9. end??
  10. ------------------or------------------------ ???
  11. case(i)
  12. ? ?? ???when 1
  13. ? ? ? ??? ? ? ??puts(“It’s Monday”)
  14. ? ?? ???when 2
  15. ? ? ? ??? ? ? ??puts(“It’s Tuesday”)
  16. ? ?? ???when 3?
  17. ? ? ? ??? ? ? ??puts(“It’s Wednesday”)
  18. ? ?? ???when 4
  19. ? ? ? ??? ? ? ??puts(“It’s Thursday”)
  20. ? ?? ???when 5?
  21. ? ? ? ??? ? ? ??puts(“It’s Friday”)
  22. ? ?? ???when (6..7)
  23. ? ? ? ??? ? ? ??puts(“It’s the weekend!”)
  24. ? ?? ???else
  25. ? ? ? ??? ? ? ??puts(“error”)
  26. end ?
另外,当匹配成功后我们不需要为输入break语句来退出case语句,在Ruby中,一量匹配成功,case语句会自动跳出。
发表评论
用户名: 匿名