在Io中的方法内设置对象的值

时间:2016-07-25 16:47:46

标签: object methods scope iolanguage

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

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

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

myObject drop
myObject println //returns original object

我做错了什么?

1 个答案:

答案 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
)

由于并非所有类型的集合都可以存在,因此内置了removeAllempty方法。