ruby 迭代器和可列舉物件

2021-07-02 04:29:32 字數 2483 閱讀 8610

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,1)   

輸出 1 6 11

block_given?是kenel的乙個方法,可用於是否呼叫乙個**塊。

[ruby]view plain

copy

def sequence(n,m,c)  

i,s = 0,  

while iy = m*i + c  

yield y if block_given?  

s << y  

i += 1  

ends  

enda =sequence(3,5,1)   #yield 

puts a  

上面例子中如果**塊存在則呼叫yield語句,否則不呼叫。

2、數值迭代器

integer類包含三個常用的迭代器:

upto 把每乙個整數都傳遞給其相關聯的**塊,而且包含該區間的起始和結束端點。

[ruby]view plain

copy

4.upto(6) do |x|  

puts x  

end downto 類似與upto。

[ruby]view plain

copy

4.downto(1) do |x|  

puts x  

end

times   當在整數上呼叫integer.times時,方法將呼叫相關聯**n次,並把0---n-1的值一次傳遞給**塊

[ruby]view plain

copy

3.times    # 0 1 2

step   相當於步長

[ruby]view plain

copy

0.step(math::pi,0.1)   

3、可列舉物件

array hash  range

下面例子可輸出指定檔案的內容:

[ruby]view plain

copy

filename = argv[0]  

file.open(filename) do |f|  

f.each   

end 進一步給每行加入乙個行號,可用each_with_index

[ruby]view plain

copy

filename = argv[0]  

file.open(filename) do |f|  

f.each_with_index do |line,number|  

puts "#: #"

endend

常見的迭代器:

collect  將返回值放到陣列中

[ruby]view plain

copy

squares = [1,2,3].collect   

print squares     #print [1,4,9]

select 如果**塊返回的值不為false或nil,則選中並組合成乙個陣列返回

[ruby]view plain

copy

evens = (1..10).select   

print evens   #print [2, 4, 6, 8, 10]

reject 與select相反,它返回那些使**塊返回nil或false的元素。

[ruby]view plain

copy

data = [1,2,3,4,5]  

result = data.inject   

puts result   4、

外部迭代器:可反覆呼叫乙個列舉器的next方法來遍歷乙個集合的元素,當所有的元素被遍歷之後,next方法丟擲乙個stopiteration異常。

[ruby]view plain

copy

iterator = 1.upto(9)  

begin

print iterator.next

while

true

rescue stopiteration  

puts "...end"

end

迭代器和可迭代物件

本篇文章簡單談談可迭代物件,迭代器和生成器之間的關係。三者簡要關係圖 可迭代物件與迭代器 剛開始我認為這兩者是等同的,但後來發現並不是這樣 下面直接丟擲結論 1 可迭代物件包含迭代器。2 如果乙個物件擁有 iter 方法,其是可迭代物件 如果乙個物件擁有next方法,其是迭代器。3 定義可迭代物件,...

可迭代物件和迭代器

建立這個物件的類中是否定義了 iter 方法,如果定義了,那麼這個物件就是可迭代物件。isinstance obj,iterable 判斷 判斷乙個物件是不是迭代器的時候,需要判斷建立這個例項物件的類中是否定義了 iter 方法和 next 方法,如果都定義了,那麼這個物件就是可迭代物件。所以如果乙...

可迭代物件和迭代器

實現了 iter 方法的物件稱為可迭代物件,在python中,可迭代物件有字串 列表 元組 字典 集合等 class mynumbers def init self self.a 1 def iter self return self my numbers mynumbers 判斷物件是否是可迭代物...