Ruby 迴圈

Ruby 迴圈

Ruby 中的迴圈用於執行相同的程式碼塊若干次。本章節將詳細介紹 Ruby 支援的所有迴圈語句。

Ruby while 語句

語法

while conditional [do] code end

或者

語法

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

Ruby while 修飾符

語法

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

Ruby until 修飾符

語法

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
............................