2011-08-19 11 views
8

मैं अभी भी एक नौसिखिया स्कैला प्रोग्रामर हूं, इसलिए खेद है कि यह प्रश्न बेवकूफ़ दिख सकता है, लेकिन मैंने थोड़ी देर की खोज की और कोई समाधान नहीं मिला। मैं स्काला 2.8 उपयोग कर रहा हूँ, और मैं एक वर्ग PXGivenZ परिभाषित किया गया है के रूप में:स्कैला प्रकार मिस्चैच समस्या (अपेक्षित मानचित्र, scala.collection.mutable.HashMap मिला)

class PXGivenZ (val x:Int, val z:Seq[Int], val values: Map[Seq[Int], Map[Int, Double]]){...} 

जब मैं इस तरह के कार्यक्रम की एक और ब्लॉक में उस वर्ग का एक तत्व का दृष्टांत का प्रयास करें:

// x is an Int 
// z is a LinkedList of Int 
... 
var zMap = new HashMap[Seq[Int], HashMap[Int, Double]] 
... 
val pxgivenz = new PXGivenZ(x, z, zMap) 

मैं निम्न त्रुटि: कैसे एक मानचित्र [Seq [इंट], मानचित्र [इंट, डबल]] एक HashMap [Seq [इंट], HashMap से अलग [इंट:

found : scala.collection.mutable.HashMap[Seq[Int],scala.collection.mutable.HashMap[Int,Double]] 
required: Map[Seq[Int],Map[Int,Double]] 
      val pxgivenz = new PXGivenZ(x, z, zMap) 
              ^

वहाँ स्पष्ट रूप से कुछ मैं नहीं मिलता है , डबल]]? या "mutable" वर्गों के साथ कुछ गलत है?

किसी भी व्यक्ति को अग्रिम धन्यवाद जो मेरी मदद करेगा!

उत्तर

20

डिफ़ॉल्ट रूप से, Map जो स्कैला फ़ाइल में आयात किया गया है scala.collection.immutable.Map है और scala.collection.Map नहीं है। और निश्चित रूप से, आपके मामले में, हैश मैप एक परिवर्तनीय मानचित्र है, एक अपरिवर्तनीय नहीं है।

इस प्रकार अगर आप चाहते हैं कि Map आपकी फ़ाइल में scala.collection.Map को संदर्भित करता है, तो आप इसे स्पष्ट रूप आयात करने के लिए है:

import scala.collection.Map 

इस पसंद का कारण यह है कि आप एक अपरिवर्तनीय और में एक अस्थायी संरचना में हेरफेर नहीं होगा उसी तरह। इस प्रकार, स्कैला डिफ़ॉल्ट रूप से अनुमान लगाता है कि आप अपरिवर्तनीय संरचना का उपयोग करेंगे जो "सबसे सुरक्षित" हैं। यदि आप ऐसा नहीं करना चाहते हैं, तो आपको इसे स्पष्ट रूप से बदलना होगा।

+0

धन्यवाद! इससे समस्या हल हो गई :-) – Alberto

+0

'हैश मैप' उत्परिवर्तनीय या अपरिवर्तनीय हो सकता है। उत्परिवर्तनीय संस्करण आयात किया जाना चाहिए। –

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