gpt4 book ai didi

smalltalk - Smalltalk中的self和self有什么区别?

转载 作者:行者123 更新时间:2023-12-03 13:25:00 24 4
gpt4 key购买 nike

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

它们之间有什么区别?

最佳答案

保留字self是一个伪变量(你不能分配给它),它指的是使用它的方法的当前接收者。另一边yourself是一条消息,您可以将其发送到任何对象以获取相同的对象。
yourself的实现是

yourself
^self

意思是留言 yourself会像我刚才解释的那样表现。

原因 yourself exists 是为了支持消息级联,你把它作为最后一条消息,以确保结果表达式将与接收者一起回答:
^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只是为了方便而存在的常规方法。

关于smalltalk - Smalltalk中的self和self有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33850170/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com