2014-09-05 76 views
2

我需要一個Map[String, Either[Seq[String], String]]它應該是可變的(是的,我知道壞習慣,但我仍然在學習)。所以,當我試圖把它定義是這樣的:斯卡拉映射與任一

val map: Map[String, Either[Seq[String], String]] = mutable.HashMap("" -> Right("")) 

我得到一個錯誤

type mismatch; 
[error] found : scala.collection.mutable.HashMap[String,scala.util.Right[Nothing,String]] 
[error] required: Map[String,Either[Seq[String],String]] 
[error] val map:Map[String,Either[Seq[String],String]] = mutable.HashMap("" -> Right("")) 

我應該如何定義它的權利?

+0

HashMap(「」 - > Right [Seq [String],String](「」)))應該如何工作,我認爲。 – 2014-09-06 01:31:19

回答

4

通常,在製作可變集合(或var或任何可變的)時,最好在其創建中明確指定類型。這是因爲可變集合在包含類型中是不變的,並且推斷不變類型是不可靠的。

所以,你可以寫,

val map = mutable.HashMap[String,Either[Seq[String],String]]("" -> Right("")) 

,這應該給你正確的類型。

+0

哦,是的,我只是忘記了可變收藏的invariantion)謝謝) – Dante 2014-09-05 21:35:17