保留字self
是一个伪变量(不能分配给它),它引用使用它的方法的当前接收者。另一方面yourself
是一条消息,您可以发送给任何对象以获取同一对象。
实施yourself
is
yourself
^self
意思是该消息yourself
将会像我刚才解释的那样表现。
之所以yourself
存在是为了支持消息级联,您将其作为最后一条消息以确保结果表达式将回答接收者:
^receiver
msg1;
msg2;
yourself
If msg2
可能会回答与receiver
你可以附加yourself
忽略该答案并返回的消息receiver
反而。当然,您可以通过编写以下内容来获得相同的结果:
receiver
msg1;
msg2.
^receiver
由于这两个示例很简单,因此可能很难理解其优点是什么。但是,请考虑receiver
不是一个变量,而是一个复杂的表达式,类似的东西。
^(self msg: arg1 arg: arg2)
msg1;
msg2;
yourself.
不使用yourself
您必须添加一个临时变量来保存接收器的值以实现相同的目的:
| answer |
answer := self msg: arg1 arg: arg2.
answer
msg1;
msg2.
^answer
这有点冗长。
总而言之,self
是一个保留字,指的是当前接收者并且yourself
只是一种常规方法,只是为了方便而存在。