स्मॉलटॉक में, विधि विधि के भीतर अक्सर दो शब्द पाए जाते हैं: self
और yourself
।स्मॉलटॉक में स्वयं और स्वयं के बीच क्या अंतर है?
उनके बीच क्या अंतर है?
स्मॉलटॉक में, विधि विधि के भीतर अक्सर दो शब्द पाए जाते हैं: self
और yourself
।स्मॉलटॉक में स्वयं और स्वयं के बीच क्या अंतर है?
उनके बीच क्या अंतर है?
आरक्षित शब्द 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
केवल एक नियमित विधि है जो सुविधा के लिए है।
self
किसी ऑब्जेक्ट का समानार्थी है: विशेष रूप से उस संदेश का प्राप्तकर्ता जिसने विधि को बुलाया। यह एक विधि के शरीर के भीतर प्रयोग किया जाता है।
yourself
एक संदेश है जिसे आप किसी ऑब्जेक्ट को भेज सकते हैं, जो संदेश के प्राप्तकर्ता को लौटाता है।
anObject yourself
anObject
देता है।
yourself
अक्सर एक विधि शरीर के भीतर संदेश कैस्केड के अंत में उपयोग किया जाता है।
आप रिसीवर होने की विधि से वापसी मान चाहते हैं, लेकिन झरना में अंतिम संदेश कुछ और ही देता है, तो आप लिख सकते हैं या तो:
self aMessageReturningTheReceiver;
aMessageReturningTheArgument: anArgument .
^self
या
self aMessageReturningTheReceiver;
aMessageReturningTheArgument: anArgument;
yourself