Scala中存在类型的下划线

Scala中存在类型的下划线,scala,existential-type,Scala,Existential Type,我读过一篇关于Scala中存在类型的博客: 在这个博客中,它提到了一个例子: Map[Class[T forSome { type T}], String] Map[Class[T] forSome { type T}, String] Map[Class[T], String] forSome { type T} 他的解释。“第三个是所有映射类型的超类型,因此有一些T,它们是映射[Class[T],String]。因此,我们在映射中的键有一些固定的类类型-只是这次我们不知道它是什么类型。但是

我读过一篇关于Scala中存在类型的博客:

在这个博客中,它提到了一个例子:

Map[Class[T forSome { type T}], String]
Map[Class[T] forSome { type T}, String]
Map[Class[T], String] forSome { type T}
他的解释。“第三个是所有映射类型的超类型,因此有一些T,它们是映射[Class[T],String]。因此,我们在映射中的键有一些固定的类类型-只是这次我们不知道它是什么类型。但是,中间的一个有一些{type T}的类[T]键。也就是说,它的键是允许其类型参数具有任何值的类。因此,这就是我们实际需要的。”

这个解释不容易理解。代码示例中的第二个和第三个有什么区别?谁能给我们举一些例子吗

博客还提到,
Map[Class[\uz],String]
相当于示例中的第三个,而实际上我们需要第二个。当我们对存在类型使用
\uu
时,这会影响语义吗

代码示例中的第二个和第三个有什么区别

在第三种类型中,不能有两个类型为
Class[t]
的键,它们的
t
不同,例如
Map(classOf[Object]->“Object”,classOf[String]->“String”)
没有这种类型(但它有第二种类型)

博客还提到,
Map[Class[\uz],String]
相当于示例中的第三个,而实际上我们需要第二个

这篇文章提到这一点在将来可能会改变,而且已经改变了。现在它相当于第二个。请参见中的示例:

类型
List[List[\u]]
相当于存在类型
List[List[t]对于某些{type t}]

当我们将u用于存在类型时,这会影响语义吗

这取决于你的具体情况。如果它给出了您想要的类型(根据上面链接的规范),并且您认为它比某些表单的更可读,请使用
;对某些
使用
,否则