Scala 映射中值类型的清单不提供任何类型
如何获取映射中第二个类型参数的清单?Scala 映射中值类型的清单不提供任何类型,scala,Scala,如何获取映射中第二个类型参数的清单? 例如,以下功能: def asMap[T <: AnyRef]()(implicit m : Manifest[T]) : Map[Int, T] = { println(m) // Nothing ... } 隐式m参数绑定到无 使用数组执行相应的操作: def asArray[T <: AnyRef]()(implicit m : Manifest[T]) : Array[T] = { println(m
例如,以下功能:
def asMap[T <: AnyRef]()(implicit m : Manifest[T]) : Map[Int, T] = {
println(m) // Nothing
...
}
隐式m参数绑定到无
使用数组执行相应的操作:
def asArray[T <: AnyRef]()(implicit m : Manifest[T]) : Array[T] = {
println(m) // java.lang.String
...
}
隐式m参数被绑定到java.lang.String
——正如预期的那样任何人都可以解释一下吗?它看起来像是因为
Map
在其第二个参数中是协变的:Map[A,B+]
,而Array
在其类型中是不变的:Array[T]它看起来像是因为Map
在其第二个参数中是协变的:Map[A,B+],然而,Array
的类型是不变的:Array[T]
我不太明白你在做什么-如果你没有一个Map作为参数,你怎么能得到参数呢
def getManifest[A,B: Manifest](map: Map[A,B]) = manifest[B]
val map = Map(1 -> "one")
getManifest(map) //Manifest[java.lang.String] = java.lang.String
我不太明白你在做什么-如果你没有地图作为参数,你怎么能得到参数
def getManifest[A,B: Manifest](map: Map[A,B]) = manifest[B]
val map = Map(1 -> "one")
getManifest(map) //Manifest[java.lang.String] = java.lang.String
因为Scala从最严格的类型开始(即,Nothing
)并仅在需要时扩展。所以,有可能获得实际类型吗?@Harald-val-map=asMap[String]
。或者您可以传入实际创建的映射,其中不再有使用哪种类型的选择。而且因为Scala选择了最严格的类型(即,Nothing
)并仅在需要时才加宽。因此,完全可以获得实际类型吗?@Harald-val map=asMap[String]
满足您的需要。或者您可以传入实际创建的映射,其中不再有任何要使用哪种类型的选择。
def getManifest[A,B: Manifest](map: Map[A,B]) = manifest[B]
val map = Map(1 -> "one")
getManifest(map) //Manifest[java.lang.String] = java.lang.String