Smalltalk 中的迴圈

對於此示例,將使用 Ordered Collection 來顯示可以傳送到 OrderedCollection 物件以迴圈遍歷元素的不同訊息。
下面的程式碼將使用訊息 new 例項化一個空的 OrderedCollection,然後使用訊息 add:用 4 個數字填充它

anOrderedCollection := OrderedCollection new.
anOrderedCollection add: 1; add: 2; add: 3; add: 4.

所有這些訊息都將塊作為引數,將為集合中的每個元素進行評估。

  1. do:
    這是基本的列舉訊息。例如,如果我們想要列印集合中的每個元素,我們可以這樣實現:

    anOrderedCollection do:[:each | Transcript show: each]. "Prints --> 1234"
    

    集合中的每個元素都將使用以下語法定義為使用者希望::eachdo:迴圈將集合中的每個元素列印到 Transcript 視窗。

  2. collect:
    collect:訊息允許你為集合中的每個專案執行某些操作,並將操作結果放入新集合中
    。例如,如果我們想將集合中的每個元素乘以 2 並將其新增到新集合中,我們可以使用 collect:訊息:

    evenCollection := anOrderedCollection collect:[:each | each*2]. "#(2 4 6 8)"
    
  3. select:
    select:訊息允許你建立一個子集合,其中根據某些條件為他們選擇原始集合中的專案。例如,如果我們想從我們的集合中建立一個新的奇數集合,我們可以使用 select:訊息:

    oddCollection := anOrderedCollection select:[:each | each odd].
    

    由於 each odd 返回一個布林值,只有使布林返回 true 的元素才會被新增到 oddCollection,這將有 #(1 3)

  4. reject:
    此訊息與 select:相反,並拒絕任何使布林返回 true 的元素。或者,換句話說,它將選擇使布林返回 false 的任何元素。例如,如果我們想像前面的例子一樣構建相同的 oddCollection。我們可以使用 reject:

    oddCollection := anOrderedCollection reject:[:each | each even].
    

    oddCollection 將再次以 #(1 3) 為其元素。

這些是 Smalltalk 中的四種基本列舉技術。但是,你可以隨意瀏覽 Collections 類以獲取可能實現的更多訊息。