2016-07-25 24 views
1

我试图从一个方法内设置一个对象的值。这里有一个例子:设置从一个方法中的对象的值在Io

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

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

myObject drop 
myObject println //returns original object 

我在做什么错?

回答

1

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

你在找什么是使用修改自我的方法。由于List是用C语言编写的,因此您必须直接与C语言编写的某些东西或某些与C语言编写的东西进行交互,以清除列表中的内容。试想一下:

myObject drop := method(
    self empty 
) 

这是怎么回事是名单有一个名为empty方法,删除所有项目,并返回现在是空的对象。它与一个名为removeAll的原始List方法进行通信来实现这一点。

虽然这是有点切割和干燥。在一般情况下,在其他情况下,您可能希望保存要从收集中删除之前要返回的项目。即,

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

由于不是可能存在每个类型的集合,将有建于removeAllempty方法。

相关问题