2011-07-15 7 views
15

मैं (mutable और अपरिवर्तनीय) सेट्स की एक सूची बनाने की कोशिश करता हूं। कंपाइलर परेशानी में पड़ता है क्योंकि यह उस सूची के प्रकार को नहीं समझ सकता है। मैंने हमेशा सोचा कि मैं किसी भी प्रकार की सूचियों को जोड़ सकता हूं और नई सूची का प्रकार कनेक्टेड सूचियों का एक प्रकार का सुपरटेप है। निम्नलिखित उदाहरण में, मैं कुछ सूचियों को परिभाषित करता हूं। आप उन सूचियों के प्रकार, संकलक द्वारा दिए गए देख सकते हैं:स्कैला में (अपरिवर्तनीय और परिवर्तनीय) सेट्स की सूची कैसे प्राप्त करें?

val intList = List(1) //List[Int] 
val stringList = List("ab") //List[java.lang.String] 
val mSetList = List(mutable.Set(1, 2, 3)) //List[scala.collection.mutable.Set[Int]] 
val iSetList = List(immutable.Set(1, 2, 3)) //List[scala.collection.immutable.Set[Int]] 

अब मैं ::: ऑपरेटर का उपयोग इन सूचियों कनेक्ट करने के लिए:

val intStringList = intList:::stringList //List[Any] 
val intMSetList = intList:::mSetList //List[Any] 
val intISetList = intList:::iSetList //List[Any] 

जैसी उम्मीद थी, संकलक एक आम महाप्रकार गणना करता है (List[Any]) दोनों सूचियों के। लेकिन निम्नलिखित संकलन नहीं करता है:

val iSetmSetList = iSetList:::mSetList //type error 

लेकिन अगर मैं स्पष्ट रूप से दो सूचियों "डाली", यह काम करता है:

val setList1 : List[scala.collection.Set[Int]] = mSetList //List[scala.collection.Set[Int]] 
val setList2 : List[scala.collection.Set[Int]] = iSetList // List[scala.collection.Set[Int]] 
val setList = setList1:::setList2 //List[scala.collection.Set[Int]] 

क्यों मुझे लगता है कि का सही प्रकार प्राप्त करने के लिए संकलक मदद करने के लिए क्या है सूची? और यह List[Any] के साथ बस टाइप करने के बजाय त्रुटि क्यों उत्पन्न करता है? क्या यह List[scala.collection.Set[Int]] प्रकार की गणना करना सैद्धांतिक रूप से असंभव है या यह संकलक में एक प्रकार का बग है?

धन्यवाद :-)

+4

मुझे http के बारे में सोच बनाता है यही कारण है कि: // stackoverflow। कॉम/प्रश्न/5734755/स्कैला-प्रकार-चौड़ाई-अनुमान-का-फुट-टीटी जिसे https://issues.scala-lang.org/browse/SI-4501 के साथ तय किया गया था। 6/25 से अधिक रात के साथ एक शॉट के साथ कोशिश कर एक शॉट के लायक? – huynhjl

उत्तर

5

अपने जवाब के लिए एक बहुत यह एक बग था, और हर रात को संस्करणों में तय हो गई है, के रूप में huynhjl संदिग्ध:

Welcome to Scala version 2.10.0.r25234-b20110705020226 
    (Java HotSpot(TM) 64-Bit Server VM, Java 1.6.0_24) 
Type in expressions to have them evaluated. 
Type :help for more information. 
. . . 
scala> val iSetmSetList = iSetList:::mSetList //type error 
iSetmSetList: List[scala.collection.Set[Int]] = List(Set(1, 2, 3), Set(2, 1, 3)) 
संबंधित मुद्दे

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