我正在尝试从方法内部设置对象的值。这是一个例子:
myObject := list(1,2,3,4,5)
myObject drop := method(
self := list()
)
myObject drop
myObject println //returns original object
我究竟做错了什么?
我正在尝试从方法内部设置对象的值。这是一个例子:
myObject := list(1,2,3,4,5)
myObject drop := method(
self := list()
)
myObject drop
myObject println //returns original object
我究竟做错了什么?
您所做的是在方法内创建一个新插槽并将其命名为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
)
由于并非所有可能存在的集合类型都内置了removeAll
or方法。empty