如何在scala中存储不同的值类型
我可能有一个简单而愚蠢的问题,如何使用Scala映射存储不同的值类型,例如,我希望映射同时存储字符串和双值,我尝试了以下代码:如何在scala中存储不同的值类型,scala,Scala,我可能有一个简单而愚蠢的问题,如何使用Scala映射存储不同的值类型,例如,我希望映射同时存储字符串和双值,我尝试了以下代码: var yaraMap: Map[String, AnyRef] = Map() yaraMap+={"as"->10.0} yaraMap+={"bb"->'val'} 但是它告诉了类型不匹配,我怎样才能解决这个问题,谢谢 将地图定义为 val yaraMap: Map[String, Any] = Map() Any是Double和String的常见
var yaraMap: Map[String, AnyRef] = Map()
yaraMap+={"as"->10.0}
yaraMap+={"bb"->'val'}
但是它告诉了类型不匹配,我怎样才能解决这个问题,谢谢 将地图定义为
val yaraMap: Map[String, Any] = Map()
Any是Double和String的常见超类型
下图演示了AnyVal和AnyRef之间的关系。String是AnyRef的子类型,Double是AnyVal的子类型,它们的公共超类型是Any
将地图定义为
val yaraMap: Map[String, Any] = Map()
Any是Double和String的常见超类型
下图演示了AnyVal和AnyRef之间的关系。String是AnyRef的子类型,Double是AnyVal的子类型,它们的公共超类型是Any
大卫·弗兰克的回答很好。这里有一个使代码类型安全的小改进:Any和AnyRef允许您向映射添加任何其他类型,而无需编译器抱怨 如果只希望值为双精度或字符串,可以执行以下操作:
var yaraMap: Map[String, Either[Double, String]] = Map()
yaraMap+={"as"->Left(10.0)}
yaraMap+={"bb"->Right("val")}
可以说更为冗长,但至少如果您尝试添加,比如列表或任何其他类型,它会中断
yaraMap+={"as"->Left(34)}
<console>:9: error: type mismatch;
found : List[String]
required: Double
yaraMap+={"as"->Left(List("a"))}
大卫·弗兰克的回答很好。这里有一个使代码类型安全的小改进:Any和AnyRef允许您向映射添加任何其他类型,而无需编译器抱怨 如果只希望值为双精度或字符串,可以执行以下操作:
var yaraMap: Map[String, Either[Double, String]] = Map()
yaraMap+={"as"->Left(10.0)}
yaraMap+={"bb"->Right("val")}
可以说更为冗长,但至少如果您尝试添加,比如列表或任何其他类型,它会中断
yaraMap+={"as"->Left(34)}
<console>:9: error: type mismatch;
found : List[String]
required: Double
yaraMap+={"as"->Left(List("a"))}
谢谢David,为什么AnyRef和Object不好,但是请随便。因为Double不是AnyRef,而是AnyVal非常感谢David的精彩图片:谢谢David,为什么AnyRef和Object不好,但是请随便。因为Double不是AnyRef,而是AnyVal非常感谢David的精彩图片: