类型和泛型:`[X <: Int]` 和 `{type X <: Int }` 的区别

5

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

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

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

根据我的观察,现在人们大多使用第二种形式(使用[]),同时我有时会看到一些文章(主要是关于存在类型的旧文章)使用第一种形式(forSome)。
为什么会有两种符号?使用其中一种或另一种有什么利弊或限制吗?

2
正如您所注意到的,这是存在类型,别名是方括号中的通配符;优缺点无法描述,因为它是不同类型的;在这里您可以阅读更多信息:http://www.drmaciver.com/2008/03/existential-types-in-scala/(附有示例),抱歉没有完整的回复,我没有时间编写自己的内容。 - DaunnC
1个回答

1
他们确实非常相似,你在困惑中并不孤单。关于存在类型最好的文章是这里(如@DaunnC所提到的)。实际上,还有第三种方式可以用抽象类型来表达同样的意思。
就理由而言,我会认为有些东西只是语法糖,而其他一些则是语言演变的产物。Scala 2.14计划解决一些冗余问题并简化语言。具体来说:
统一化简所有信息省略形式的类型语法:存在类型和部分类型应用都用_表示,forSome语法被消除。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接