如何在scala中存储不同的值类型

时间:2016-01-24 14:20:21

标签: scala

我可能有一个简单的愚蠢问题,如何使用Scala Map存储不同的值类型,例如,我想要Map存储字符串和double值,我尝试了以下代码:

var yaraMap: Map[String, AnyRef] = Map()
yaraMap+={"as"->10.0}
yaraMap+={"bb"->'val'}

但它告诉了类型不匹配,我该如何解决这个问题,谢谢!

2 个答案:

答案 0 :(得分:9)

将地图定义为

val yaraMap: Map[String, Any] = Map()

AnyDoubleString的常见超类型。

下图显示了AnyValAnyRef的关联方式。 String是[{1}}的子类型,AnyRefDouble的子类型,其常见超类型为AnyVal

image source

答案 1 :(得分:1)

大卫弗兰克的答案很棒。这是一个很小的改进,使代码类型安全(注意:Any和AnyRef将允许您在没有编译器抱怨的情况下向Map添加任何其他类型)。

如果您只希望您的值为Double或String,则可以执行以下操作:

var yaraMap: Map[String, Either[Double, String]] = Map() 
yaraMap+={"as"->Left(10.0)}
yaraMap+={"bb"->Right("val")}

可能更详细,但至少如果你尝试添加它会破坏,例如List()或任何其他类型。

yaraMap+={"as"->Left(34)}
 <console>:9: error: type mismatch;
 found   : List[String]
 required: Double
              yaraMap+={"as"->Left(List("a"))}