簡單的ruby 迭代器

2021-04-17 21:37:30 字數 1439 閱讀 4468

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

對於ruby來說,我完全是個新手,所以目前所寫的文章都絕對是基礎性的,主要作為乙個筆記的作用,所以各位高手可不要bs在下。不過還好,總是有一點點底子,學起來不至於那麼痛苦。昨天搞了本《the ruby way》來看,本來想買《programming ruby》,可是後來看到way這本書覺得它更適合我,對於一般的語法介紹隨便上網看看就可以了,而way一書主要是從解決各種問題著手,實用性較強,我們學語言就是為了解決問題嘛,可不是為了顯擺,經過艱難的抉擇最終選擇了way這本書(最主要是way一書便宜些,呵呵),有的朋友說這些書可以從網路上獲得,為什麼還要買?我只能說這是我的習慣,更喜歡實體書,特別是好書自己一定要有一本實體書收藏。(汗乙個,只是為了收藏。)

買了書回來後,迫不及待的翻開看了下,其中第一章有一段粗略的講了下迭代器的實現,大概看了下,實現非常簡單,其**如下:

def repeat(condition)

yield

retry 

ifnot condition

endrepeat方法接受乙個condition引數,首先執行**塊,然後如果condition為false的時候retry進行重新執行**塊。非常簡單且簡潔的實現,這裡包含了兩個重要的關鍵字,乙個是yield,另外乙個就是retry,yield的作用就是執行方法所接受的**塊,這是動態語言中非常重要的概念,如果對這個概念不了解,那麼ruby就很難學下去了,在groovy裡面也有同樣的功能,使用

closure閉包實現的。而retry的作用就是重新執行**塊,當然是在not condition成立的時候。

書裡同時也實現了乙個可傳遞引數的迭代器實現,**如下(為什麼csdn插入**功能裡提供的語言種類沒有ruby,鬱悶):

defmy_sequence

fori in1

..10

doyield

iend

endmy_sequence 

以上**實現了乙個迭代器生成1~10的整數,然後呼叫這個迭代器生成前10個整數的立方。方法接受乙個帶引數的**塊

,然後進行迴圈執行該**塊,yield之後的i就是傳給**塊的引數。

對於以上第乙個實現,我對其進行了一點點修改,具體如下:

defrepeat(condition)

ifnot

condition

yield

retry 

endend

說實話,這個實現我也是按照自己的理解修改,感覺這樣更適合,自己試了下沒什麼問題,結果也如我所料,可是感覺這樣的寫法不太好,只能在慢慢的學習去體會了。

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中的迭代器詳解

d瓜哥最近想做乙個 另外,老早就有學習一門動態語言的想程式設計客棧法,滿足著兩個條件的程式語言中,ruby python是最合適的兩種語言。現在ruby on rails如日中天,光芒萬丈!所以,就選定了ruby,從零開始學習。前天看了ruby的迭代器,對於我這個只學過j a c c 等的人來說,絕...

ruby 塊 和 迭代器

塊 塊由大量的 組成。您需要給塊取個名稱。塊中的 總是包含在大括號 內。總是從與其具有相同名稱的函式呼叫。這意味著如果您的塊名稱 為 test 那麼您要使用函式 test 來呼叫這個塊。您可以使用 yield 語句來呼叫塊。語法block name 在這裡,您將學到如何使用乙個簡單的 yield 語...