Scala 中 Map 的扩展方法
Extension Method for Map in Scala
我是Scala界的新手!
我正在尝试开发一些助手,让我的 Scala 代码生活更轻松。
例如,我试图让它工作的其中一个部分如下 -
object Helpers{
implicit class MapExt(val self: Map[String, Any]) extends AnyVal {
// gets a map value for specified key casting as required type
def GetValueAs[T](key: String): T = self(key).asInstanceOf[T];
}
}
这段代码背后的逻辑是我有一个 String
到 Any
的映射,我需要在 运行 时间转换值。我在这里试图实现的目标并不重要,重要的是我们如何在 Scala 中做到这一点。我怎样才能拥有适用于特定泛型类型(在本例中为 Map[String, Any]
)的扩展方法,并且该方法本身就是泛型类型。如果我尝试将它用作 -
,上面的代码会给我一个编译时错误
myMap.GetValueAs[Date]("start_date")
错误:值 GetValueAs 不是 scala.collection.immutable.Map[String,Any]
的成员
有人可以帮忙让他的简单示例正常工作吗?这将是一个很大的帮助,我很感激!
谢谢
您需要将扩展方法纳入范围,即通过导入它们:
object Helpers {
implicit class MapExt(val self: Map[String, Any]) extends AnyVal {
// gets a map value for specified key casting as required type
def getValueAs[A](key: String): A = self(key).asInstanceOf[A]
}
}
import Helpers._ // !
Map("foo" -> 2, "bar" -> 3.45).getValueAs[Int]("foo") // works
我是Scala界的新手! 我正在尝试开发一些助手,让我的 Scala 代码生活更轻松。 例如,我试图让它工作的其中一个部分如下 -
object Helpers{
implicit class MapExt(val self: Map[String, Any]) extends AnyVal {
// gets a map value for specified key casting as required type
def GetValueAs[T](key: String): T = self(key).asInstanceOf[T];
}
}
这段代码背后的逻辑是我有一个 String
到 Any
的映射,我需要在 运行 时间转换值。我在这里试图实现的目标并不重要,重要的是我们如何在 Scala 中做到这一点。我怎样才能拥有适用于特定泛型类型(在本例中为 Map[String, Any]
)的扩展方法,并且该方法本身就是泛型类型。如果我尝试将它用作 -
myMap.GetValueAs[Date]("start_date")
错误:值 GetValueAs 不是 scala.collection.immutable.Map[String,Any]
的成员有人可以帮忙让他的简单示例正常工作吗?这将是一个很大的帮助,我很感激!
谢谢
您需要将扩展方法纳入范围,即通过导入它们:
object Helpers {
implicit class MapExt(val self: Map[String, Any]) extends AnyVal {
// gets a map value for specified key casting as required type
def getValueAs[A](key: String): A = self(key).asInstanceOf[A]
}
}
import Helpers._ // !
Map("foo" -> 2, "bar" -> 3.45).getValueAs[Int]("foo") // works