.NET 4 बीटा 2 में, struct BigInteger
के साथ नया न्यूमेरिक्स नेमस्पेस है। documentation बताता है कि यह एक अपरिवर्तनीय प्रकार है, जैसा कि मैंने अपेक्षा की थी।बिगइंटर अपरिवर्तनीय है या नहीं?
लेकिन मैं बाद में वृद्धि ऑपरेटर (++
) द्वारा थोड़ा उलझन में हूं। यह निश्चित रूप से मूल्य को बदलना प्रतीत होता है। निम्नलिखित जबकि पाश काम करता है:
क्योंकि BigInteger वस्तुओं अपरिवर्तनीय हैं, वृद्धि ऑपरेटर एक नया BigInteger वस्तु जिसका बनाता है:
static BigInteger Factorial(BigInteger n) { BigInteger result = BigInteger.One; BigInteger b = BigInteger.One; while (b <= n) { result = result * b; b++; // immutable ? } return result; }
यह MSDN क्या बढ़ते क्रम में ऑपरेटर के बारे में क्या कहना है है मूल्य बिगइंटर ऑब्जेक्ट द्वारा मूल्य से अधिक एक है। इसलिए, वृद्धि बढ़ाने के लिए बार-बार कॉल महंगा हो सकता है।
सभी अच्छी तरह से और ठीक है, मैं अगर मैं b = b++
का इस्तेमाल किया था लेकिन जाहिरा तौर पर ++
अपने आप में एक मूल्य बदलने के लिए पर्याप्त है समझ में आ गया होगा।
कोई विचार?
संपादित करें:
लास के मुताबिक, step-by-step specification है कि कैसे पोस्ट-वृद्धि कार्य करता है। लेकिन यह अभी भी अपरिवर्तनीयता के साथ बाधाओं को लगता है। उदाहरण के लिए, मैं कल्पना नहीं कर सकता कि इस ऑपरेटर का उपयोग थ्रेड-सुरक्षित है।
उचित लगता है, लेकिन यह अभी भी अपरिवर्तनीयता को तोड़ता है। मैं सवाल थोड़ा सा संपादित करूंगा। –
नहीं, यह अपरिवर्तनीयता को तोड़ता नहीं है, मुझे अपना उत्तर अपडेट करने दें। –
's + = s2' में एक दृश्य असाइनमेंट है। यह फिट बैठता है अगर आप स्वीकार करते हैं कि 'बी ++' एक असाइनमेंट भी है, यानी 'बी = बी + 1'। लेकिन '++' अभी भी लगता है/ऐसा लगता है कि यह उत्परिवर्तित है। –