据我所知,这两个函数是等效的:
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/