Latest web development tutorials

Ruby 循環

Ruby 中的循環用於執行相同的代碼塊若干次。 本章節將詳細介紹Ruby 支持的所有循環語句。

Rubywhile語句

語法

while conditional [do]
   code
end

或者

<pre>
while conditional [:]
   code
end

conditional為真時,執行code

語法中do 或: 可以省略不寫。 但若要在一行內寫出while 式,則必須以do 或: 隔開條件式或程式區塊。

實例

#!/usr/bin/ruby
# -*- coding: UTF-8 -*-

$i = 0
$num = 5

while $i < $num  do
   puts("在循环语句中 i = #$i" )
   $i +=1
end

以上實例輸出結果為:

在循环语句中 i = 0
在循环语句中 i = 1
在循环语句中 i = 2
在循环语句中 i = 3
在循环语句中 i = 4

Rubywhile修飾符

語法

code while condition

或者

begin 
  code 
end while conditional

conditional為真時,執行code

如果while修飾符跟在一個沒有rescue或ensure子句的begin語句後面,code會在conditional判斷之前執行一次。

實例

#!/usr/bin/ruby
# -*- coding: UTF-8 -*-

$i = 0
$num = 5
begin
   puts("在循环语句中 i = #$i" )
   $i +=1
end while $i < $num

以上實例輸出結果為:

在循环语句中 i = 0
在循环语句中 i = 1
在循环语句中 i = 2
在循环语句中 i = 3
在循环语句中 i = 4

Ruby until語句

until conditional [do]
   code
end

conditional為假時,執行code

語法中do 可以省略不寫。 但若要在一行內寫出until 式,則必須以do 隔開條件式或程式區塊。

實例

#!/usr/bin/ruby
# -*- coding: UTF-8 -*-

$i = 0
$num = 5

until $i > $num  do
   puts("在循环语句中 i = #$i" )
   $i +=1;
end

以上實例輸出結果為:

在循环语句中 i = 0
在循环语句中 i = 1
在循环语句中 i = 2
在循环语句中 i = 3
在循环语句中 i = 4
在循环语句中 i = 5

Rubyuntil修飾符

語法

code until conditional

或者

begin
   code
end until conditional

conditional為false時,執行code

如果until修飾符跟在一個沒有rescue或ensure子句的begin語句後面,code會在conditional判斷之前執行一次。

實例

#!/usr/bin/ruby
# -*- coding: UTF-8 -*-

$i = 0
$num = 5
begin
   puts("在循环语句中 i = #$i" )
   $i +=1;
end until $i > $num

以上實例輸出結果為:

在循环语句中 i = 0
在循环语句中 i = 1
在循环语句中 i = 2
在循环语句中 i = 3
在循环语句中 i = 4
在循环语句中 i = 5

Ruby for語句

語法

for variable [, variable ...] in expression [do]
   code
end

先計算表達式得到一個對象,然後針對expression中的每個元素分別執行一次code

實例

#!/usr/bin/ruby
# -*- coding: UTF-8 -*-

for i in 0..5
   puts "局部变量的值为 #{i}"
end

在這裡,我們已經定義了範圍0..5。 語句for i in 0..5 允許i 的值從0 到5(包含5)。

以上實例輸出結果為:

局部变量的值为 0
局部变量的值为 1
局部变量的值为 2
局部变量的值为 3
局部变量的值为 4
局部变量的值为 5

for...in循環幾乎是完全等價於:

(expression).each do |variable[, variable...]| code end

但是,for 循環不會為局部變量創建一個新的作用域。

語法中do 可以省略不寫。 但若要在一行內寫出for 式,則必須以do 隔開條件式或程式區塊。

實例

#!/usr/bin/ruby
# -*- coding: UTF-8 -*-

(0..5).each do |i|
   puts "局部变量的值为 #{i}"
end

以上實例輸出結果為:

局部变量的值为 0
局部变量的值为 1
局部变量的值为 2
局部变量的值为 3
局部变量的值为 4
局部变量的值为 5

Ruby break語句

語法

break

終止最內部的循環。 如果在塊內調用,則終止相關塊的方法(方法返回nil)。

實例

#!/usr/bin/ruby
# -*- coding: UTF-8 -*-

for i in 0..5
   if i > 2 then
      break
   end
   puts "局部变量的值为 #{i}"
end

以上實例輸出結果為:

局部变量的值为 0
局部变量的值为 1
局部变量的值为 2

Ruby next語句

語法

next

跳到循環的下一個迭代。 如果在塊內調用,則終止塊的執行( yield表達式返回nil)。

實例

#!/usr/bin/ruby
# -*- coding: UTF-8 -*-

for i in 0..5
   if i < 2 then
      next
   end
   puts "局部变量的值为 #{i}"
end

以上實例輸出結果為:

局部变量的值为 2
局部变量的值为 3
局部变量的值为 4
局部变量的值为 5

Ruby redo語句

語法

redo

重新開始最內部循環的該次迭代,不檢查循環條件。 如果在塊內調用,則重新開始yieldcall

實例

#!/usr/bin/ruby
# -*- coding: UTF-8 -*-

for i in 0..5
   if i < 2 then
      puts "局部变量的值为 #{i}"
      redo
   end
end

這將產生以下結果,並會進入一個無限循環:

局部变量的值为 0
局部变量的值为 0
............................

Ruby retry語句

注意:1.9以及之後的版本不支持在循環中使用retry。

語法

retry

如果retry出現在begin表達式的rescue子句中,則從begin主體的開頭重新開始。

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

如果retry 出現在迭代內、塊內或者for 表達式的主體內,則重新開始迭代調用。 迭代的參數會重新評估。

for i in 1..5
   retry if some_condition # 重新从 i == 1 开始
end

實例

#!/usr/bin/ruby
# -*- coding: UTF-8 -*-

for i in 1..5
   retry if  i > 2
   puts "局部变量的值为 #{i}"
end

這將產生以下結果,並會進入一個無限循環:

局部变量的值为 1
局部变量的值为 2
局部变量的值为 1
局部变量的值为 2
局部变量的值为 1
局部变量的值为 2
............................