2013-07-05 37 views

回答

4

是有,但它是一個普通的消息發送,而不是一個特殊的賦值語句。

在佳樂,有例如FloatArray >> + =,這增加了另一個數組的元素到所述接收器的元素:

| f | 
f := #(1 2 3) asFloatArray. 
f += #(4 5 6). 
f 
==> a FloatArray(5.0 7.0 9.0) 

W¯¯重要的是f在接收到+ =消息之前和之後指的是同一個對象。只有其內容發生變化。你可以用類似的方式爲你自己的類實現+ =。

你無法做的事(*)正在使用+ =替換變量的值,就像其他語言一樣。這只是一個常規的消息發送,接收對象可能會做一些有用的事情。

(*)沒有黑客編譯器。如果你堅持不懈,你可以做任何事情,但總的來說這不是一個好主意。

7

不需要。所有消息發送都會發生,所以無法定義向左側分配新值的操作。只有賦值:=可以做到這一點。

4

理論上可能存在某種黑客行爲。例如,您可以定義類NewNumber並將其值存儲在value實例變量中。現在,您可以定義

+= increment 
    value := value + increment 

:)

甚至一元的消息

increment 
    value := value + 1 

將充當++。但是在Numbers中所有的魔法都是在原語的幫助下完成的(VM端的函數可以直接處理內存,可以定義一個原語來修改一個數字的狀態,然後在+ = method中調用它,但是增加新的原語吮吸和當前的風格(在那裏你總是使用一個返回值)是相當不錯的,說實話。

+2

和相關數據的非常好的事情之一是,他們是透明的。您不需要編輯數字的狀態,但可以獲得具有所需狀態更改的新數字。 –

相關問題