2013-07-05 35 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

和相关数据的非常好的事情之一是,他们是透明的。您不需要编辑数字的状态,但可以获得具有所需状态更改的新数字。 –

相关问题