2015-11-22 8 views

उत्तर

24

आरक्षित शब्द self एक छद्म चर है (आप इसे असाइन नहीं कर सकते हैं) जो उस विधि के वर्तमान रिसीवर को संदर्भित करता है जहां इसका उपयोग किया जाता है। दूसरी तरफ yourself एक संदेश है जिसे आप किसी भी ऑब्जेक्ट को उसी ऑब्जेक्ट को प्राप्त करने के लिए भेज सकते हैं।

yourself के कार्यान्वयन

yourself 
    ^self 

है जिसका अर्थ है कि संदेश yourself के रूप में मैं सिर्फ समझाया व्यवहार करेगा।

^receiver 
    msg1; 
    msg2; 
    yourself 

तो msg2 कुछ से अलग के साथ जवाब देने के हो सकता है:

कारण है कि yourself मौजूद संदेश व्यापक समर्थन करने के लिए है, जहां आप सुनिश्चित करें कि परिणामी अभिव्यक्ति रिसीवर के साथ जवाब देंगे बनाने के लिए अंतिम संदेश के रूप में यह डाल है 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 केवल एक नियमित विधि है जो सुविधा के लिए है।

3

self किसी ऑब्जेक्ट का समानार्थी है: विशेष रूप से उस संदेश का प्राप्तकर्ता जिसने विधि को बुलाया। यह एक विधि के शरीर के भीतर प्रयोग किया जाता है।

yourself एक संदेश है जिसे आप किसी ऑब्जेक्ट को भेज सकते हैं, जो संदेश के प्राप्तकर्ता को लौटाता है।

anObject yourselfanObject देता है।

yourself अक्सर एक विधि शरीर के भीतर संदेश कैस्केड के अंत में उपयोग किया जाता है।

आप रिसीवर होने की विधि से वापसी मान चाहते हैं, लेकिन झरना में अंतिम संदेश कुछ और ही देता है, तो आप लिख सकते हैं या तो:

self aMessageReturningTheReceiver; 
     aMessageReturningTheArgument: anArgument . 
^self 

या

self aMessageReturningTheReceiver; 
     aMessageReturningTheArgument: anArgument; 
     yourself 
संबंधित मुद्दे