Smalltalk 中的迴圈
對於此示例,將使用 Ordered Collection 來顯示可以傳送到 OrderedCollection 物件以迴圈遍歷元素的不同訊息。
下面的程式碼將使用訊息 new 例項化一個空的 OrderedCollection,然後使用訊息 add:用 4 個數字填充它
anOrderedCollection := OrderedCollection new.
anOrderedCollection add: 1; add: 2; add: 3; add: 4.
所有這些訊息都將塊作為引數,將為集合中的每個元素進行評估。
-
do:
這是基本的列舉訊息。例如,如果我們想要列印集合中的每個元素,我們可以這樣實現:anOrderedCollection do:[:each | Transcript show: each]. "Prints --> 1234"集合中的每個元素都將使用以下語法定義為使用者希望:
:each此do:迴圈將集合中的每個元素列印到Transcript視窗。 -
collect:
collect:訊息允許你為集合中的每個專案執行某些操作,並將操作結果放入新集合中
。例如,如果我們想將集合中的每個元素乘以 2 並將其新增到新集合中,我們可以使用collect:訊息:evenCollection := anOrderedCollection collect:[:each | each*2]. "#(2 4 6 8)" -
select:
select:訊息允許你建立一個子集合,其中根據某些條件為他們選擇原始集合中的專案。例如,如果我們想從我們的集合中建立一個新的奇數集合,我們可以使用select:訊息:oddCollection := anOrderedCollection select:[:each | each odd].由於
each odd返回一個布林值,只有使布林返回 true 的元素才會被新增到oddCollection,這將有#(1 3)。 -
reject:
此訊息與select:相反,並拒絕任何使布林返回true的元素。或者,換句話說,它將選擇使布林返回false的任何元素。例如,如果我們想像前面的例子一樣構建相同的oddCollection。我們可以使用reject::oddCollection := anOrderedCollection reject:[:each | each even].oddCollection將再次以#(1 3)為其元素。
這些是 Smalltalk 中的四種基本列舉技術。但是,你可以隨意瀏覽 Collections 類以獲取可能實現的更多訊息。