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