Scala 为映射中的值获取正确的数据类型
我有一个Scala 为映射中的值获取正确的数据类型,scala,map,implicit,Scala,Map,Implicit,我有一个 Map[String, Any] 映射中的值可以是任何内容,从字符串和双精度到序列和映射序列。我想创建一个函数,该函数可以识别值的类型,并在向函数输入键时返回值。 我的想法是创建一个隐式类,“扩展”scalamap库中的get函数的功能,并将其放入我的包文件中。 大概是这样的: implicit class RichMap(map: Map[String, Any]) { def getImplicit(key: String) = { val value = map.g
Map[String, Any]
映射中的值可以是任何内容,从字符串和双精度到序列和映射序列。我想创建一个函数,该函数可以识别值的类型,并在向函数输入键时返回值。我的想法是创建一个隐式类,“扩展”scala
map
库中的get
函数的功能,并将其放入我的包
文件中。
大概是这样的:
implicit class RichMap(map: Map[String, Any]) {
def getImplicit(key: String) = {
val value = map.get(key)
value match {
case None => throw NonExistentKeyException(key + "does not exist")
case Some(v) => v match {
case s: String => s
//Other case statements
}
}
}
}
myMap.getImplicit(key)
我是这样使用它的:
implicit class RichMap(map: Map[String, Any]) {
def getImplicit(key: String) = {
val value = map.get(key)
value match {
case None => throw NonExistentKeyException(key + "does not exist")
case Some(v) => v match {
case s: String => s
//Other case statements
}
}
}
}
myMap.getImplicit(key)
正如你所看到的,这更像是一种“暴力”方式。是否有一种更通用/优雅的方法可用于我的问题陈述?是否要在
键下返回元素的类型(类)?那样的话,怎么样
implicit class RichMap(map: Map[String, Any]) {
def getImplicit(key: String) = map.get(key).map(_.getClass)
}
或者,如果您确实希望抛出异常:
implicit class RichMap(map: Map[String, Any]) {
def getImplicit(key: String) = {
map.get(key) match {
case None => throw NonExistentKeyException(key + "does not exist")
case Some(v) => v.getClass
}
}
}
只需返回v
。如果这不是你想要的,那么你的问题就不清楚了。模式匹配在哪方面有帮助?如果Map
可以包含任何类型的值,编译器就无法事先知道get方法必须返回哪个具体类型。当您有String
、Int
等的案例时,getImplicit
的返回类型仍然是Any
。