ruby迭代器使用方法

來源:互聯網
上載者:User

迭代器並不是Ruby發明的.它廣泛地運用於各種物件導向語言.在Lisp中也有,只是不這麼叫罷了.儘管如此,迭代器的概念並不為許多人熟悉,因此我們將在此做較為詳細的介紹.

你知道,動詞 iterate 的意思是做同一件事許多遍,因此,iterator就是用來將同一件事做許多次的東西.

當我們寫代碼時,我們需要各種環境下的迴圈.在C裡,我們用for或者while.比如,

char *str;for (str = "abcdefg"; *str != '\0'; str++) {/* process a character here */}

C的for(...)文法提供了一種寫迴圈的抽象方法,但測試 *str 是否為空白(null)字元需要程式員瞭解字串內部結構的細節.這讓C看起來像低級(low-level)語言.更進階的語言是通過它們更具彈性的迭代器支援來實現的.考慮下面的 sh 命令列指令碼:

#!/bin/shfor i in *.[ch]; do# ... here would be something to do for each filedone

目前的目錄下所有的C源檔案和標頭檔都將被處理,由命令列shell來一個個地撿取檔案名稱並處理其中的細節.我想這是在比 C 要高的層級上工作,你覺得呢?

但有更多值得我們考慮的:在一種語言能夠很好的給內建的資料類型的提供迭代器的同時,我們卻仍需要回去用低層級的迴圈語言來實現對自己定義的資料類型的迭代,這真是讓人失望.在面對對象編程時,使用者經常一個接一個地定義資料類型,因此這是一個很嚴重的問題.

因此,所有的OOP語言都包含了一定的迭代器機制.某些語言為此提供一種特殊的類;Ruby則允許我們直接定義迭代器.

Ruby的String類型有很多有用的迭代器:

ruby> "abc".each_byte{|c| printf "<%c>", c}; print "\n"<a><b><c>nil

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.