繁体   English   中英

Smalltalk中自我和你自己有什么区别?

[英]What is the difference between self and yourself in Smalltalk?

在Smalltalk中,在方法体中经常会发现两个术语: selfyourself

他们之间有什么区别?

保留字self是一个伪变量(您无法分配给它),它指的是使用它的方法的当前接收者。 在另一边yourself是可以发送到任何物体来获取相同的对象的消息。

yourself的实现是

yourself
    ^self

即消息yourself的行为,因为我刚才解释。

yourself存在的原因是支持消息级联,你把它作为最后一条消息,以确保结果表达式将与接收者一起回答:

^receiver
   msg1;
   msg2;
   yourself

如果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只是为了方便起见的常规方法。

self是对象的同义词:特别是调用该方法的消息的接收者。 它在方法体内使用。

yourself是一个可以发送给对象的消息,它返回消息的接收者。

anObject yourself返回anObject

yourself经常在方法体内的消息级联结束时使用。

如果希望方法的返回值为接收者,但级联中的最终消息返回其他内容,则可以编写:

self aMessageReturningTheReceiver;
      aMessageReturningTheArgument: anArgument .
^self

要么

self aMessageReturningTheReceiver;
      aMessageReturningTheArgument: anArgument;
      yourself

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM