陈斌彬的技术博客

Stay foolish,stay hungry

Ruby -循环与判断

循环

1. while 循环与 until 循环

语法1:

while conditional [do]
   code
end

当 conditional 为真时执行 code

语法2:

code while condition

或者

begin
    code    
end while conditional

当 conditional 为真时,执行 code。

可以与 C 语言的 do…while 语句进行对比

#!/usr/bin/ruby        #文件名为while.rb

$i = 0
$num = 3
puts "begin while"
while $i < $num  do
   puts("Inside the loop(while) i = #$i" )
   $i +=1
end
puts "end while"
$i=0
puts "begin do while"
begin
   puts("Inside the loop(do while) i = #$i" )
   $i +=1
end while $i < $num
puts "end do while"

运行:

$ ruby while.rb

img

2. until 循环

语法1:

until conditional [do]
   code
end

语法2:

code until conditional

或者:

begin
   code
end until conditional

3. for、break 和 next 语句

for 范例1:

#!/usr/bin/ruby

for i in 0..5        #新建范围
   puts "Value of local variable is #{i}"
end

img

for 范例2:

#!/usr/bin/ruby

(0..5).each do |i|
   puts "Value of local variable is #{i}"
end

img

break 范例:

#!/usr/bin/ruby

for i in 0..5
   if i > 2 then
      break        #退出循环
   end
   puts "Value of local variable is #{i}"
end

img

next 范例:

#!/usr/bin/ruby

for i in 0..5
   if i < 2 then
      next        #跳转到下一次循环
   end
   puts "Value of local variable is #{i}"
end

img

4. redo 和 retry 语句

redo 范例:

#!/usr/bin/ruby        #文件名为redo.rb

for i in 0..5
   if i < 2 then
      puts "Value of local variable is #{i}"
      redo        #重新开始最内部循环的该次迭代,不检查循环条件
   end
end

运行结果将无限循环:

$ ruby redo.rb

img

如果 retry 出现在 begin 表达式的 rescue 子句中,则从 begin 主体的开头重新开始执行。

语法:

begin
   do_something         #抛出的异常
rescue
   #处理错误
   retry                 #重新从 begin 开始
end

如果 retry 出现在迭代内、块内或者 for 表达式的主体内,则重新开始迭代调用。迭代的参数会重新评估。

范例:

#!/usr/bin/ruby     #文件名为retry.rb

n = 0
begin
  puts 'Trying to do something'
  raise 'oops'        #抛出一个消息为"oops"的RuntimeError
rescue => ex        #捕捉异常,并将异常保存至ex变量
  puts ex            #打印异常消息
  n += 1
  retry if n < 3
end
puts "Ok, I give up"

运行:

img

判断

1. if 语句

if 范例1:

#!/usr/bin/ruby        #文件名为if1.rb

x=1
if x > 2
   puts "x is greater than 2"    #句1
elsif x <= 2 and x!=0
   puts "x is 1"            #句2
else
   puts "I can't guess the number"    #句3
end

如果 x>2 则执行句1,否则如果 x<=2 并且 x!=0 则执行句2,其他情况执行句3。

img

if 范例2:

#!/usr/bin/ruby        #文件名为if2.rb

$debug=1
print "debug\n" if $debug    #如果“if $debug”为真,则执行print “debug\n”

运行:

img

2. unless 语句

unless 范例1:

#!/usr/bin/ruby        #文件名为unless.rb

x=1
unless x>2
   puts "x is less than 2"    #句1
 else
  puts "x is greater than 2"    #句2
end
#如果x>2为假则执行句1,否则执行句2

img

与 if 语句相似,下面看范例2。

unless 范例2:

#!/usr/bin/ruby        #文件名为unless2.rb

$var = 1                #不能写为ture
print "1 -- Value is set\n" if $var        #复习if语句,并与unless语句对比
print "2 -- Value is set\n" unless $var    #如果 $var为假,则执行print "2 -- Value is set\n"

$var = false            #不能写成0
print "3 -- Value is set\n" unless $var

img

3. case 语句

范例:

#!/usr/bin/ruby        #文件名为case.rb

$age = 56
case $age                #比较指定的age
when 0 .. 2            #与0,1,2三个数字进行比较
    puts "baby"        #若匹配,则执行此句
when 3 .. 6
    puts "little child"
when 7 .. 12
    puts "child"
when 13 .. 18
    puts "youth"
else                    #若以上均不匹配
    puts "adult"        #则执行此句
end                    #不要忘了case…end

运行:

$ ruby case.rb
adult