Object 从Io中的方法内部设置对象的值

Object 从Io中的方法内部设置对象的值,object,methods,scope,iolanguage,Object,Methods,Scope,Iolanguage,我试图从方法内部设置对象的值。下面是一个例子: myObject := list(1,2,3,4,5) myObject drop := method( self := list() ) myObject drop myObject println //returns original object 我做错了什么?您所做的是在方法内部创建一个新槽,并将其命名为self。这意味着当方法返回时,它将消失。在Ioself中,self不是关键字,没有关键字,因此它没有特殊意义 你要找的是用

我试图从方法内部设置对象的值。下面是一个例子:

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

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

myObject drop
myObject println //returns original object

我做错了什么?

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

你要找的是用一种方法来修改自我。由于
List
是用C编写的,因此必须直接与用C编写的东西交互,或者与用C编写的东西交互,才能清除列表的内容。考虑:

myObject drop := method(
    self empty
)
这里发生的是List有一个名为
empty
的方法,它删除所有项并返回现在为空的对象。它与一个名为
removeAll
的原始列表方法进行对话以完成此任务

不过这有点干巴的。在一般情况下,在其他情况下,您可能需要先保存要返回的项目,然后再将其从集合中删除。i、 e

myCollection drop := method(
    result := self at(42)
    self removeAllTheThings
    result
)
由于并非所有可能存在的集合类型都会内置
removeAll
empty
方法