我有一个我在smalltalk中创建的对象的词典,我通过基于键/值对枚举来迭代它。
对于字典中的value对象,我在该对象上调用一个方法。基于某些条件,我希望这个对象能够将新成员添加到字典中,并可能删除另一个成员。
我一直在关注Smalltalk中的'Perform'和'Messages'设施,但我不确定是否有可能做我正在尝试做的事情 - 是否可以返回消息(或多个消息),另一个对象可以处理和执行?
例如,我的方法可以同时返回'removeKey:19'和'添加对象'吗?
我正在使用GNU Smalltalk,如果重要的话。
答案 0 :(得分:5)
迭代集合时,将集合作为参数的一部分传递:
aCollection copy do: [:each | each doSomethingOn: aCollection]
该副本确保#doSomethingOn:
可以改变原始集合而不会弄乱迭代。
答案 1 :(得分:1)
Smalltalk方法不能返回多个值,但它可以返回包含这些值的Collection:
foo
^ Array with: 1 with: 2.
所以你返回一个包含多个方法的Collection,然后迭代它,在Collection中发送消息。
答案 2 :(得分:1)
课程消息可以做你想要的:
(Message selector: #raisedTo: argument: 2) sendTo: 3
评估时产生“9”。
注意,在迭代过程中添加或删除集合中的东西通常不是一个好主意。尝试先复制集合,遍历副本并从用于迭代副本的块中修改原始文件。