我试图从方法内部设置对象的值。这是一个例子:
myObject := list(1,2,3,4,5)
myObject drop := method(
self := list()
)
myObject drop
myObject println //returns original object
我做错了什么?
答案 0 :(得分:1)
您所做的是在方法内创建一个新槽并将其命名为self
。这意味着当方法返回时它会消失。在Io中self
不是关键字,没有关键字,因此它没有特殊含义。
您正在寻找的是使用修改自我的方法。由于List
是用C语言编写的,因此您必须直接与用C语言编写的东西或与C语言编写的东西接口,以清除列表的内容。考虑:
myObject drop := method(
self empty
)
这里发生的是List有一个名为empty
的方法,它删除所有项目并返回现在空的对象。它与名为removeAll
的原始List方法进行对话,以实现此目的。
虽然有点干和干。在一般情况下,在其他情况下,您可能希望在将其从集合中删除之前保存要返回的项目。即,
myCollection drop := method(
result := self at(42)
self removeAllTheThings
result
)
由于并非所有类型的集合都可以存在,因此内置了removeAll
或empty
方法。