Smalltalk中self和yourself有什么区别?
What is the difference between self and yourself in Smalltalk?
在 Smalltalk 中,方法体中经常出现两个术语:self
和 yourself
。
它们有什么区别?
保留字self
是一个伪变量(不能赋值给它),它指的是使用它的方法的当前接收者。在另一边 yourself
是一条消息,您可以将其发送到任何对象以获取完全相同的对象。
yourself
的实现是
yourself
^self
意味着消息 yourself
将按照我刚才解释的方式运行。
存在yourself
的原因是为了支持消息级联,将其作为最后一条消息放置,以确保生成的表达式将与接收者一起回答:
^receiver
msg1;
msg2;
yourself
如果 msg2
的回答可能与 receiver
不同,您可以附加 yourself
消息以忽略该回答,并改为 return 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
只是为了方便而存在的常规方法。
self
是对象的同义词:特别是调用该方法的消息的接收者。它在方法体内使用。
yourself
是可以发送给对象的消息,return 是消息的接收者。
anObject yourself
returns anObject
.
yourself
通常用在方法体内 消息级联 的末尾。
当您希望方法中的 return 值作为接收者,但级联中的最终消息 return 是其他内容时,您可以这样写:
self aMessageReturningTheReceiver;
aMessageReturningTheArgument: anArgument .
^self
或
self aMessageReturningTheReceiver;
aMessageReturningTheArgument: anArgument;
yourself
在 Smalltalk 中,方法体中经常出现两个术语:self
和 yourself
。
它们有什么区别?
保留字self
是一个伪变量(不能赋值给它),它指的是使用它的方法的当前接收者。在另一边 yourself
是一条消息,您可以将其发送到任何对象以获取完全相同的对象。
yourself
的实现是
yourself
^self
意味着消息 yourself
将按照我刚才解释的方式运行。
存在yourself
的原因是为了支持消息级联,将其作为最后一条消息放置,以确保生成的表达式将与接收者一起回答:
^receiver
msg1;
msg2;
yourself
如果 msg2
的回答可能与 receiver
不同,您可以附加 yourself
消息以忽略该回答,并改为 return 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
只是为了方便而存在的常规方法。
self
是对象的同义词:特别是调用该方法的消息的接收者。它在方法体内使用。
yourself
是可以发送给对象的消息,return 是消息的接收者。
anObject yourself
returns anObject
.
yourself
通常用在方法体内 消息级联 的末尾。
当您希望方法中的 return 值作为接收者,但级联中的最终消息 return 是其他内容时,您可以这样写:
self aMessageReturningTheReceiver;
aMessageReturningTheArgument: anArgument .
^self
或
self aMessageReturningTheReceiver;
aMessageReturningTheArgument: anArgument;
yourself