निम्नलिखित कोड मार्टिन ओडर्स्की एट अल द्वारा स्कैला पुस्तक में प्रोग्रामिंग से लिया गया है।क्या स्कैला में एक कन्स्ट्रक्टर-स्थानीय चर परिभाषित करना संभव है?
class Rational(n: Int, d: Int) {
require(d != 0)
private val g = gcd(n.abs, d.abs)
val numer = n/g
val denom = d/g
...
private def gcd(a: Int, b: Int): Int = if (b == 0) a else gcd(b, a % b)
}
यहाँ मूल्य जी केवल जब अंतर्निहित निर्माता initializes क्षेत्रों numer और denom प्रयोग किया जाता है: जो एक तर्कसंगत प्रकार परिभाषित करता है। मान लीजिए प्रोग्रामर जानता है कि यह कहीं और इस्तेमाल नहीं किया जाएगा। उपर्युक्त मामले में यह तर्कसंगत वस्तु के निर्माण के बाद भी सुलभ है। जिसका अर्थ यह है कि यह कन्स्ट्रक्टर को स्थानीय चर होने की बजाए एक निजी क्षेत्र है क्योंकि यह अंतरिक्ष पर भी कब्जा करेगा।
मेरा सवाल यह है कि मैं इस कोड को कैसे बदलूं ताकि g
केवल निर्माण के दौरान उपयोग किया जा सके और फिर फेंक दिया जाए?
यह स्कैला में उन "icky अंक" में से एक है। कल्पना कीजिए कि यदि दिए गए कन्स्ट्रक्टर ऑब्जेक्ट का उपयोग केवल कुछ मनमानी जानकारी निकालने के लिए किया जाता था: इसे हमेशा के लिए रखने के लिए इसे पुनः दावा के योग्य होने के बावजूद रखा जाएगा, भले ही जानकारी का केवल एक छोटा सा सबसेट आवश्यक हो। मुझे लगता है कि एक "प्री-क्लास बॉडी" वाक्यविन्यास है, लेकिन मुझे याद नहीं है कि यह क्या है। –
@pst इस त्वरित संपादन के लिए धन्यवाद मैं इस बीच ऐसा कर रहा था। हालांकि आप बेहतर दिखते हैं। :) – ciuncan
यदि किसी के पास इस "प्री-क्लास बॉडी" वाक्यविन्यास के बारे में कोई लिंक है जो पीएसटी का उल्लेख करता है, तो मुझे इसके बारे में सुनना होगा। –