ruby 塊 和 迭代器

2021-08-01 20:11:59 字數 3865 閱讀 4845

塊:   

塊由大量的**組成。

您需要給塊取個名稱。

塊中的**總是包含在大括號{} 內。

總是從與其具有相同名稱的函式呼叫。這意味著如果您的塊名稱                     為

test

,那麼您要使用函式

test

來呼叫這個塊。

您可以使用

yield

語句來呼叫塊。

語法block_name

在這裡,您將學到如何使用乙個簡單的

yield

語句來呼叫塊。您也將學到如何使用帶有引數的

yield

語句來呼叫塊。在例項中,您將看到這兩種型別的

yield

語句。yield

語句讓我們看乙個

yield

語句的例項:例項#

!/usr/bin/ruby

# -*- coding: utf-8 -*-

def

test

puts "在

test

方法內"

yield

puts

"你又回到了

test

方法內"

yield

end

test

以上例項執行結果為:

在test

方法內你在塊內

你又回到了

test

方法內你在塊內

您也可以傳遞帶有引數的

yield

語句。下面是乙個例項:例項#

!/usr/bin/ruby

# -*- coding: utf-8 -*-

def

test

yield

5 puts "在

test

方法內"

yield

100

end

test 內

"}以上例項執行結果為:

你在塊 5 內

在test

方法內你在塊

100

內在這裡,

yield

語句後跟著引數。您甚至可以傳遞多個引數。在塊中,您可以在兩個豎線之間放置乙個變數來接受引數。因此,在上面的**中,

yield 5

語句向test

塊傳遞值

5 作為引數。

現在,看下面的語句:

test 內

"}在這裡,值

5 會在變數

i 中收到。現在,觀察下面的

puts

語句:puts

"你在塊# 內

"這個puts

語句的輸出是:

你在塊5

內如果您想要傳遞多個引數,那麼

yield

語句如下所示:

yielda,

b此時,塊如下所示:

test

引數使用逗號分隔。

塊和方法

您已經看到塊和方法之間是如何相互關聯的。您通常使用

yield

語句從與其具有相同名稱的方法呼叫塊。因此,**如下所示:例項#

!/usr/bin/ruby

def

test

yield

end

test

本例項是實現塊的最簡單的方式。您使用

yield

語句呼叫

test

塊。但是如果方法的最後乙個引數前帶有 &,那麼您可以向該方法傳遞乙個塊,且這個塊可被賦給最後乙個引數。如果 * 和 & 同時出現在引數列表中,& 應放在後面。例項#

!/usr/bin/ruby

def

test(&

block

)block

.call

end

test

以上例項執行結果為:

hello world

!begin 和 end 塊

每個ruby

原始檔可以宣告當檔案被載入時要執行的**塊(

begin

塊),以及程式完成執行後要執行的**塊(

end

塊)。例項

#!/usr/bin/ruby

begin

end

# main

**塊puts

"main

**塊"

乙個程式可以包含多個

begin

和end

塊。begin

塊按照它們出現的順序執行。

end

塊按照它們出現的相反順序執行。當執行時,上面的程式輸出以下結果:

begin

**塊main

**塊end

**塊

迭代器:

簡單來說:迭代

(iterate)

指的是重複做相同的事,所以迭代器

(iterator)

就是用來重複多次相同的事。

迭代器是

集合支援的方法。儲存一組資料成員的物件稱為集合。在

ruby

中,陣列

(array)

和雜湊(hash)

可以稱之為集合。

迭代器返回集合的所有元素,乙個接著乙個。在這裡我們將討論兩種迭代器,

each

和collect

。ruby

each

迭代器each

迭代器返回陣列或雜湊的所有元素。

語法collection

.each do|

variable

|code

end

為集合中的每個元素執行

code

。在這裡,集合可以是陣列或雜湊。例項#

!/usr/bin/ruby

ary= [1

,2,3

,4,5

] ary

.each do|

i|puts i

end

以上例項執行輸出結果為:12

345each

迭代器總是與乙個塊關聯。它向塊返回陣列的每個值,乙個接著乙個。值被儲存在變數

i中,然後顯示在螢幕上。

ruby

collect

迭代器collect

迭代器返回集合的所有元素。

語法collection

= collection

.collect

collect

方法不需要總是與乙個塊關聯。

collect

方法返回整個集合,不管它是陣列或者是雜湊。

例項例項

#!/usr/bin/ruby a=

[1,2

,3,4

,5] b

= array

.new b=

a.collect

puts b

以上例項執行輸出結果為:12

345注意

:collect

方法不是陣列間進行複製的正確方式。這裡有另乙個稱為

clone

的方法,用於複製乙個陣列到另乙個陣列。

當您想要對每個值進行一些操作以便獲得新的陣列時,您通常使用

collect

方法。例如,下面的**會生成乙個陣列,其值是

a 中每個值的

10 倍。例項#

!/usr/bin/ruby a=

[1,2

,3,4

,5] b

= a.collect

puts b

以上例項執行輸出結果為:

1020

304050

ruby的迭代器

1 陣列的迭代器 ary 1,2,3,4,5,6,7 ary.each 或者可以用each do end的寫法 ary 1,2,3,4,5,6,7 ary.each do x puts x end 也可以用each with index來獲取每次訪問陣列的index ary 1,2,3,4,5,6,...

ruby 迭代器和可列舉物件

1 yield關鍵字 yield語句就像乙個方法呼叫,它的後面可以接零個或多個表示式,而這些表示式的值將被賦給對應的 塊形參。ruby view plain copy def sequence n,m,c i 0 while iyield m i c i 1 endend sequence 3,5,...

簡單的ruby 迭代器

由於工作關係,一直沒有時間學習ruby,最近終於有時間可以學習下ruby了,同時也在csdn開了blog,藉此記錄一下自己學習的心得,當然不僅僅是ruby,近幾年動態語言非常的火熱,而我個人也非常喜歡動態語言的簡潔,可惜一直都沒什麼時間花在上面,如果可能除了ruby,我也想花花時間在其他的語言上,例...