在Smalltalk中返回消息

时间:2010-03-08 06:33:19

标签: smalltalk

我有一个我在smalltalk中创建的对象的词典,我通过基于键/值对枚举来迭代它。

对于字典中的value对象,我在该对象上调用一个方法。基于某些条件,我希望这个对象能够将新成员添加到字典中,并可能删除另一个成员。

我一直在关注Smalltalk中的'Perform'和'Messages'设施,但我不确定是否有可能做我正在尝试做的事情 - 是否可以返回消息(或多个消息),另一个对象可以处理和执行?

例如,我的方法可以同时返回'removeKey:19'和'添加对象'吗?

我正在使用GNU Smalltalk,如果重要的话。

3 个答案:

答案 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”。

注意,在迭代过程中添加或删除集合中的东西通常不是一个好主意。尝试先复制集合,遍历副本并从用于迭代副本的块中修改原始文件。