2013-02-14 24 views
7

Fantom provably immutable कक्षाओं का समर्थन करता है। एक वर्ग को जानने वाले कंपाइलर के फायदे अपरिवर्तनीय हैं, जिनमें से कम से कम अभिनेताओं के बीच पारित अपरिवर्तनीय संदेश की गारंटी नहीं दी जाएगी। Fantom का दृष्टिकोण सीधा लगता है - यह स्कैला के लिए क्या कठिनाइयों पैदा करेगा?स्कैला के लिए ला कॉन्स्टॉम "कॉन्स्ट क्लास" रखने में बाधाएं क्या हैं?

+0

इन 'कॉन्स्ट क्लास' और सरल 'केस क्लास जो भी (..)' के बीच बहुत अंतर नहीं दिखता है, 'एक गैर-कॉन्स क्लास को कॉन्स क्लास से प्राप्त नहीं किया जा सकता है' के अलावा। – dmitry

+0

केस क्लास केवल वल्स (गैर-पुन: असाइन करने योग्य) हैं - वे केवल अपरिवर्तनीय हैं यदि उनके सभी फ़ील्ड भी अपरिवर्तनीय हैं (और इसी तरह) –

+0

और यह केस क्लास का उपयोग करने का सामान्य तरीका है, अपरिवर्तनीय डेटा धारक, नहीं? – dmitry

उत्तर

12

ट्रैक साइड इफेक्ट्स पर स्कैला पक्ष पर अधिक रुचि है, जो केवल अपरिवर्तनीयता की तुलना में एक कठिन प्रस्ताव है।

खुद में अपरिवर्तनीयता पारदर्शी पारदर्शिता के रूप में प्रासंगिक नहीं है, और, वास्तव में, स्कैला के अपरिवर्तनीय संग्रहों में से कुछ "सिद्ध अपरिवर्तनीय" परीक्षण पर जरूरी नहीं होंगे क्योंकि वास्तव में, वे नहीं हैं। वे अपरिवर्तनीय हैं जहां तक ​​कोई भी बाहर से पर्यवेक्षक कर सकता है, लेकिन उनके पास विभिन्न उद्देश्यों के लिए उत्परिवर्तनीय फ़ील्ड हैं। इस तरह के

एक उदाहरण List के उपवर्ग :: (वर्ग कि एक सूची में सब कुछ है, लेकिन खाली सूची का निर्माण करता है), जिसमें head और tail के लिए खेतों वास्तव में परिवर्तनशील हो रहा है। ऐसा इसलिए किया जाता है ताकि List को एफआईएफओ ऑर्डर में कुशलतापूर्वक बनाया जा सके - ListBuffer और इसकी toList विधि देखें।

भले ही अपरिवर्तनीयता की गारंटी हो, लेकिन ऐसी चीजें वास्तव में उन भाषाओं की आर्टिफैक्ट से अधिक होंगी जहां उत्परिवर्तन डिफ़ॉल्ट है। मेरे अनुभव में, स्कैला में प्रोग्रामिंग करते समय यह एक व्यावहारिक चिंता के रूप में नहीं आता है।

1

दृष्टिकोण स्पष्ट हो सकता है,

  1. इसकी गारंटी देता है प्रतिबिंब द्वारा तोड़ा जा सकता है;
  2. इसे काफी प्रयास की आवश्यकता है, जिसे स्कैला टीम इसके लायक नहीं हो सकती है या प्राथमिकता नहीं दे सकती है।