Scala生活中的一个可悲事实是,如果你实例化一个List [Int],你可以验证你的实例是一个List,你可以验证它的任何单个元素是一个Int,但不是它是一个List [ Int],可以很容易地验证:
scala> List(1,2,3) match {
| case l : List[String] => println("A list of strings?!")
| case _ => println("Ok")
| }
warning: there were unchecked warnings; re-run with -unchecked for details
A list of strings?!
Run Code Online (Sandbox Code Playgroud)
-unchecked选项将责任直接归咎于类型擦除:
scala> List(1,2,3) match {
| case l : List[String] => println("A list of strings?!")
| case _ => println("Ok")
| }
<console>:6: warning: non variable type-argument String in type pattern is unchecked since it is eliminated by erasure
case l …Run Code Online (Sandbox Code Playgroud) 我需要一个Map,我在其中放入不同类型的值(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")
Run Code Online (Sandbox Code Playgroud)
我已经尝试了泛型类型
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)
Run Code Online (Sandbox Code Playgroud)
但是由于Container需要参数,所以不可能.这有什么解决方案吗?
我对Scala编程完全不熟悉,我有以下问题:
我需要一个HashMap,它可以包含许多数据类型(Int,String等).在C++中,我会使用BOOST的MultiMap.我听说在Scala中有一个MultiMap特征可用.基本上我想要的是以下内容:
val map = HashMap[String, ListBuffer[_]]
Run Code Online (Sandbox Code Playgroud)
ListBuffer元素的具体数据类型将在运行时确定.当我在控制台中测试此实现时,以下工作:
scala> val a = new HashMap[String, ListBuffer[_]]()
a: scala.collection.mutable.HashMap[String,scala.collection.mutable.ListBuffer[_]] = Map()
scala> val b = new ListBuffer[String]()
b: scala.collection.mutable.ListBuffer[String] = ListBuffer()
scala> val c = new ListBuffer[Int]()
c: scala.collection.mutable.ListBuffer[Int] = ListBuffer()
scala> b += "String"
res0: b.type = ListBuffer(String)
scala> c += 1
res1: c.type = ListBuffer(1)
scala> a += "String Buffer" -> b
res2: a.type = Map((String Buffer,ListBuffer(String)))
scala> a += "This is an Int Buffer" -> c
res3: a.type = …Run Code Online (Sandbox Code Playgroud)