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