2010-03-08 108 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,您也有历史记录。