2008-10-09 19 views

उत्तर

40

स्कैला में Arrays बहुत सजातीय हैं। ऐसा इसलिए है क्योंकि स्कैला एक स्थाई रूप से टाइप की गई भाषा है। यदि आपको वास्तव में छद्म-विषम विशेषताओं की आवश्यकता है, तो आपको एक अपरिवर्तनीय डेटा संरचना का उपयोग करने की आवश्यकता है जो पैरामीट्रिज्ड कोविरिएटली (सबसे अपरिवर्तनीय डेटा संरचनाएं हैं)। List वहां कैनोलिक उदाहरण है, लेकिन Vector भी एक विकल्प है।

Vector("a string", 10, Map("x" -> 1),()=>()) + "another value" 

परिणाम प्रकार Vector[Any] का हो जाएगा: तो फिर तुम कुछ इस तरह कर सकते हैं। स्थैतिक टाइपिंग के मामले में बहुत उपयोगी नहीं है, लेकिन वादा किए अनुसार सबकुछ वहां होगा।

संयोग

, सरणियों के लिए "शाब्दिक वाक्य रचना" स्काला में इस प्रकार है:

Array(1, 2, 3, 4)  // => Array[Int] containing [1, 2, 3, 4] 

भी देखें: More info on persistent vectors

+9

यह उत्तर बहुत भ्रमित है - तथ्य यह है कि ओपी का उदाहरण स्कॉला 'ऐरे' के साथ पूरी तरह से ठीक काम करता है, जैसे कि @ सॉकर के उत्तर शो। 'सूची' और 'वेक्टर' जैसे अन्य विकल्प हैं, लेकिन उनका उपयोग करने या उनका उपयोग करने के कारणों का कोई संबंध नहीं है कि उपयोग केस एकरूप या "छद्म-विषम" है या नहीं। –

+1

उत्तर शब्दकोष के साथ लगी हुई है जो इसे भ्रमित कर सकती है। यदि आप जो कह रहे हैं वह आपको मिलता है तो यह भी बहुत कुछ बताता है। मुझे संदेह है कि इस वाक्यांश को उद्देश्य पर किया गया था, क्योंकि ओपी जावास्क्रिप्ट से आ रहा है। – providence

+4

नहीं, यह वास्तव में स्कैला मूल निवासी कैसे बोलते हैं। यह पूरी तरह से सामान्य है। (और मेरा मतलब यह ईमानदारी से है; मैं बिल्कुल व्यंग्यात्मक होने की कोशिश नहीं कर रहा हूं।) –

4

स्काला जल्द ही एक "विषम" सूची के लिए क्षमता हो सकती है : HList in Scala

+3

हालांकि ध्यान दें कि एचएलिस्ट भाषा को बिल्कुल नहीं बदलता है, इसलिए यदि एचएलआईस्ट ऐसा कर सकता है, तो यह हमेशा स्कैला में रहता है। –

18

स्कैला सबसे विशिष्ट ऐरे तत्व प्रकार का चयन करेगा जो पकड़ सकता है

Array("a string", 10, new { val x = 1 },() =>()) :+ "another value" 

जिसके परिणामस्वरूप सरणी प्रकार Array[Any] का हो जाएगा: सभी मूल्यों, इस मामले में यह सबसे सामान्य प्रकार Any जो हर दूसरे प्रकार का एक महाप्रकार है की जरूरत है।

2

व्यक्तिगत रूप से, मैं संभवत: टुपल्स का उपयोग करता हूं, जैसा कि हेरोम एक टिप्पणी में उल्लेख करता है।

scala> ("a string", 10, (1),() => {}) 
res1: (java.lang.String, Int, Int,() => Unit) = (a string,10,1,<function0>) 

लेकिन आप आसानी से ऐसी संरचनाओं में शामिल नहीं हो सकते हैं।

ePharaoh द्वारा उल्लिखित एचएलिस्ट "इसके लिए बनाया गया है" लेकिन मैं शायद इसे स्वयं से स्पष्ट कर दूंगा। यह प्रोग्रामिंग पर भारी है और इसलिए इसके साथ आश्चर्यजनक भार हो सकता है (यानी संकलित होने पर कई कक्षाएं बनाना)। बस थोड़ा सावधान रहें। ऊपर (MetaScala पुस्तकालय की जरूरत है) का एक HList (साबित नहीं के बाद से मैं MetaScala उपयोग न करें) किया जाएगा:

scala> "a string" :: 10 :: (1) ::() => {} :: HNil 

आप इस तरह के एक सूची में आदि (ठीक है, कम से कम आगे जोड़ते) जोड़ सकते हैं, और यह प्रकारों को जानेंगे। तैयारी एक नया प्रकार बनाता है जिसमें पूंछ के रूप में पुराना प्रकार होता है।

फिर एक दृष्टिकोण अभी तक उल्लेख नहीं किया गया है। वर्ग (विशेष रूप से मामला वर्ग) स्काला पर बहुत हल्का कर रहे हैं और आप उन्हें एक-लाइनर्स के रूप में कर सकते हैं:

scala> case class MyThing(str: String, int: Int, x: Int, f:() => Unit) 
defined class MyThing 

scala> MyThing("a string", 10, 1,()=>{}) 
res2: MyThing = MyThing(a string,10,1,<function0>) 
बेशक

, यह या तो जोड़कर संभाल नहीं होंगे।

संबंधित मुद्दे