scala - 类型和泛型 : difference between `[X <: Int]` and `{type X <: Int }`

标签 scala generics types existential-type

据我所知,这两个函数是等效的:

def x(xx: X forSome { type X <: Int }): Unit = ()

def y[Y <: Int](yy: Y): Unit = ()

根据我的观察,现在人们大多使用第二种形式(使用 [] ),同时我有时会看到使用第一种形式( forSome )的文章(主要是旧的,讨论存在类型)。

有 2 个符号背后的原因是什么?是否有优点\缺点或你不能\不能使用一个或另一个?

最佳答案

它们确实非常相似,您并不孤单。我读过的关于存在类型的最好的文章确实给了你一个很好的解释 here (正如@DaunnC 提到的)。在Abstract Types中实际上还有第三种表达方式。 .

由于原因,我认为有些东西只是语法糖,而另一些则是语言演变的产物。 Scala 2.14计划解决一些冗余并简化语言。特别是:

Simplified and unified type syntax for all forms of information elision: existential types and partial type applications are both expressed with _, forSome syntax is eliminated.

关于scala - 类型和泛型 : difference between `[X <: Int]` and `{type X <: Int }` ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30985612/

相关文章:

Java泛型抽象类返回类型不匹配

c# - 通用类型类型转换方法(.Net)

java - 在Java中,表示枚举类型的字段常量的对象实例是否仅在首次访问时实例化?

java - Option[Long] 构造函数抛出 NullPointerException

scala - 列出任何类型排序

java - 抽象数据类型,按列表中的特定变量对对象进行排序

javascript - 在 Javascript 中更改日期时区?

scala - 从类型 scala 中获取一个类

design-patterns - Scala 中的访问者模式

java - Java泛型中的 'super'和 'extends'有什么区别