2010-03-08 68 views
2

我有一個在smalltalk中創建的對象字典,我通過基於鍵/值對枚舉對它進行迭代。在Smalltalk中返回消息

對於字典中的值對象,我正在調用該對象的方法。基於某些條件,我希望此對象能夠將新成員添加到字典中,並可能刪除另一個成員。

我一直在看Smalltalk中的'Perform'和'Messages'設施,但我不確定是否可以做我想做的事情 - 是否可以返回一條消息(或多個消息),哪個另一個對象可以處理和執行?

例如,我的方法可以同時返回'removeKey:19'和'添加對象'嗎?

我使用的是GNU Smalltalk,如果它很重要的話。

回答

5

當你遍歷集合,通過集合作爲參數的一部分:

aCollection copy do: [:each | each doSomethingOn: aCollection] 

副本確保#doSomethingOn:可以改變原來的集合不會弄亂迭代。

1

一個Smalltalk的方法不能返回多個值,但它可以返回一個包含這些值的集合:

foo 
^Array with: 1 with: 2. 

所以你返回一個集合,多種方法,只是遍歷它,在發送消息集合。

1

類的消息可以做你想做什麼:

(Message selector: #raisedTo: argument: 2) sendTo: 3 

即評估時產生的 「9」。

請注意,在迭代時添加或刪除集合中的內容通常不是一個好主意。嘗試先複製集合,迭代副本並修改用於迭代副本的塊內的原始內容。

0

如您遍歷,添加要刪除對aTemporaryDictionaryOfDeletes

然後通過每個那些重複,再配以從aDictionary爲您刪除您要添加到aDictionary,以aTemporaryDictionaryOfAdds的項目,並且項目做。

如果您將刪除添加到aDictionaryOfThingsDeletedFromADictionary,您也有歷史記錄。