1

我正在尝试从方法内部设置对象的值。这是一个例子:

myObject := list(1,2,3,4,5)

myObject drop := method(
    self := list()
)

myObject drop
myObject println //returns original object

我究竟做错了什么?

4

1 回答 1

1

您所做的是在方法内创建一个新插槽并将其命名为self。这意味着当方法返回时它会消失。在 Ioself中不是关键字,没有关键字,因此它没有特殊含义。

您正在寻找的是使用修改自我的方法。由于List是用 C 编写的,因此您必须直接与用 C 编写的东西交互,或者与用 C 编写的东西交互的东西来清除列表的内容。考虑:

myObject drop := method(
    self empty
)

这里发生的是 List 有一个名为的方法empty,它删除所有项目并返回现在为空的对象。它与调用removeAll来完成此操作的原始 List 方法对话。

不过,这有点枯燥。在一般情况下,在其他情况下,您可能希望在从集合中删除之前保存要返回的项目。IE,

myCollection drop := method(
    result := self at(42)
    self removeAllTheThings
    result
)

由于并非所有可能存在的集合类型都内置了removeAllor方法。empty

于 2016-07-26T13:21:32.887 回答