繁体   English   中英

在Scala中存在类型的下划线

[英]Underscore for existential type in Scala

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

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

Map[Class[T forSome { type T}], String]
Map[Class[T] forSome { type T}, String]
Map[Class[T], String] forSome { type T}

他的解释。 “第三个是所有地图类型的超类型,因此有一些T使得它们是Map [Class [T],String]。再次,我们在地图中为键提供了一些固定的类类型 - 它是只是这次我们不知道它是什么类型。但是中间的类型具有Class [T]类型的键,用于某些{类型T}。也就是说,它的键是允许具有他们想要的任何值的类。类型参数。这就是我们真正想要的。“

解释并不容易。 代码示例中第二个和第三个之间有什么区别? 有人能给我们一些例子吗?

博客还提到Map[Class[_], String]等同于示例中的第三个,当我们真正想要第二个时。 当我们使用_作为存在类型时,这会影响语义吗?

代码示例中第二个和第三个之间有什么区别?

在第三种类型中,你不能有两个类型为Class[T]键具有不同的T ,例如Map(classOf[Object] -> "Object", classOf[String] -> "String")没有这种类型(但确实有第二种类型)。

博客还提到Map[Class[_], String]等同于示例中的第三个,当我们真正想要第二个时。

该帖子提及将来可以改变它,它有。 现在它相当于第二个。 请参阅Scala规范中的此示例:

List[List[_]]类型等同于存在类型List[List[t] forSome { type t }]

当我们使用_作为存在类型时,这会影响语义吗?

这取决于您在特定情况下的需求。 使用_如果它给出你想要的类型(根据上面链接的规范),你认为它比forSome表单更可读; 使用forSome否则。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM