Scala中存在类型的下划线
我读过一篇关于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]。因此,我们在映射中的键有一些固定的类类型-只是这次我们不知道它是什么类型。但是
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用于存在类型时,这会影响语义吗
这取决于你的具体情况。如果它给出了您想要的类型(根据上面链接的规范),并且您认为它比某些表单的更可读,请使用;对某些
使用,否则