簡體   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