2016-07-25 21 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方法。

相關問題