我可能有一个简单的愚蠢问题,如何使用Scala Map存储不同的值类型,例如,我想要Map存储字符串和double值,我尝试了以下代码:
var yaraMap: Map[String, AnyRef] = Map()
yaraMap+={"as"->10.0}
yaraMap+={"bb"->'val'}
但它告诉了类型不匹配,我该如何解决这个问题,谢谢!
答案 0 :(得分:9)
将地图定义为
val yaraMap: Map[String, Any] = Map()
Any
是Double
和String
的常见超类型。
下图显示了AnyVal
和AnyRef
的关联方式。 String
是[{1}}的子类型,AnyRef
是Double
的子类型,其常见超类型为AnyVal
。
答案 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"))}