यह थोड़ा भ्रामक है, लेकिन स्काला कक्षाएं जो आप के उदाहरण बना सकते हैं, और वस्तुओं, जो मूल रूप से एक वर्ग के सिंगलटन उदाहरण हैं की धारणा है। इसमें साथी वर्ग की धारणा भी है, जो एक वर्ग की एक जोड़ी है और एक ही नाम वाला ऑब्जेक्ट है। यह तंत्र अनिवार्य रूप से स्थैतिक तरीकों के लिए "वर्ग" की अनुमति देता है, जो स्कैला में अन्यथा संभव नहीं है।
Array
दोनों एक वर्ग और एक साथी वस्तु है। इसके अलावा, Array
object में apply
विधि है। apply
का अर्थ है कि आप Array(arg)
के साथ एक ऑब्जेक्ट बना सकते हैं। लेकिन क्योंकि Array
एक साथी वर्ग है, इसमें एक निर्माता भी है जिसे new Array(arg)
के अधिक सामान्य तंत्र के माध्यम से बुलाया जा सकता है।
मुद्दा यह है कि Array
वस्तु में apply
Array
कंस्ट्रक्टर्स की तुलना में अलग अर्थ विज्ञान है। apply
विधि निर्दिष्ट ऑब्जेक्ट्स से एक सरणी बनाता है, इसलिए, उदाहरण के लिए, Array(1,2,3)
ऑब्जेक्ट्स 1
, 2
, और 3
से युक्त एक सरणी देता है। दूसरी ओर, कन्स्ट्रक्टर, तर्क लेते हैं जो सरणी के आयामों का आकार निर्दिष्ट करते हैं (ताकि आप बहुआयामी सरणी बना सकें), और फिर सभी स्लॉट को डिफ़ॉल्ट मान पर प्रारंभ करें।
तो, मूल रूप से:
val a = Array [Double] (10)
कॉल Array
वस्तु है, जो दिए गए वस्तुओं से युक्त एक नई सरणी बनाता है पर apply
विधि।
val a = new Array [Double] (10)
Array
कन्स्ट्रक्टर को कॉल करता है, जो 10 स्लॉट के साथ एक नई सरणी बनाता है, सभी 0.0
के डिफ़ॉल्ट मान के लिए प्रारंभ किए जाते हैं।
स्कैला में ऐरे प्रबंधन एक कीट है .. केवल तभी संभव है जब आप जमे हुए आधार – sub
ए "जमे हुए आधार" पर विकास कर रहे हों? यह सच सरणी उपचार 2.7 से 2.8 तक काफी बदल गया है, लेकिन मुझे लगता है कि हम इसके बाद स्थिर रहने की उम्मीद कर सकते हैं। अब स्कैला ऐरे जावा ऐरे है। स्कैला की "अतिरिक्त" सरणी कार्यक्षमता को implicits के माध्यम से संभाला जाता है। –
इम्प्लिकेट्स ऐरे को अधिक कार्यक्षमता प्राप्त करने की अनुमति कैसे देते हैं? –