从 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
)
因为并非所有可能存在的集合类型都会有一个 removeAll
或 empty
内置方法。
我正在尝试从方法内部设置对象的值。这是一个例子:
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
)
因为并非所有可能存在的集合类型都会有一个 removeAll
或 empty
内置方法。