塊:
塊由大量的**組成。
您需要給塊取個名稱。
塊中的**總是包含在大括號{} 內。
總是從與其具有相同名稱的函式呼叫。這意味著如果您的塊名稱 為
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,我也想花花時間在其他的語言上,例...