加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

地图Scala中的不同类型

发布时间:2020-12-16 09:22:45 所属栏目:安全 来源:网络整理
导读:我需要一个地图,我在其中放入不同类型的值(Double,String,Int,…),key可以是String. 有没有办法做到这一点,所以我用map.apply(k)得到正确的类型 val map: Map[String,SomeType] = Map()val d: Double = map.apply("double")val str: String = map.apply("str
我需要一个地图,我在其中放入不同类型的值(Double,String,Int,…),key可以是String.

有没有办法做到这一点,所以我用map.apply(k)得到正确的类型

val map: Map[String,SomeType] = Map()
val d: Double = map.apply("double")
val str: String = map.apply("string")

我已经尝试了一个通用类型

class Container[T](element: T) {
    def get: T = element
}

val d: Container[Double] = new Container(4.0)
val str: Container[String] = new Container("string")
val m: Map[String,Container] = Map("double" -> d,"string" -> str)

但是Container不可能参数.有没有解决这个问题?

解决方法

这在 shapeless年现在非常简单,

scala> import shapeless._ ; import syntax.singleton._ ; import record._
import shapeless._
import syntax.singleton._
import record._

scala> val map = ("double" ->> 4.0) :: ("string" ->> "foo") :: HNil
map: ... <complex type elided> ... = 4.0 :: foo :: HNil

scala> map("double")
res0: Double with shapeless.record.KeyTag[String("double")] = 4.0

scala> map("string")
res1: String with shapeless.record.KeyTag[String("string")] = foo

scala> map("double")+1.0
res2: Double = 5.0

scala> val map2 = map.updateWith("double")(_+1.0)
map2: ... <complex type elided> ... = 5.0 :: foo :: HNil

scala> map2("double")
res3: Double = 5.0

截至该答案的日期,这是无形的2.0.0-SNAPSHOT.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读