[英]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
消息來忽略該答案並返回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.