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

Set the value of an object from inside a method in Io

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

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

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

myObject drop
myObject println //returns original object

我做错了什么?

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

你要找的是使用修改self的方法。由于 List 是用 C 编写的,因此您必须直接与用 C 编写的东西交互,或者与用 C 编写的东西交互,以清除列表的内容。考虑:

myObject drop := method(
    self empty
)

这里发生的事情是 List 有一个名为 empty 的方法,它删除所有项目,returns 现在是空对象。它与称为 removeAll 的原始 List 方法对话来完成此操作。

虽然这有点枯燥乏味。在一般情况下,在其他情况下,您可能希望在将项目从集合中删除之前先将其保存 return。即,

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

因为并非所有可能存在的集合类型都会有一个 removeAllempty 内置方法。