Book:Scala-in-def-foo[M[]](f:M[Int])=f,这里的uu真的是存在类型吗?

Book:Scala-in-def-foo[M[]](f:M[Int])=f,这里的uu真的是存在类型吗?,scala,types,type-parameter,Scala,Types,Type Parameter,第136页。《深度Scala》一书的第页写道: 但是下面的实验表明,这里的与任何任意类型参数T完全相同,因此它可能不是存在类型 scala> def foo[M[_]](f : M[Int]) = f foo: [M[_]](f: M[Int])M[Int] scala> def foo[M[T]](f : M[Int]) = f foo: [M[T]](f: M[Int])M[Int] 还要注意下面的Scala语言规范的第4.4节,这也表明\uuu与这里的T相同 有人能解释

第136页。《深度Scala》一书的第页写道:

但是下面的实验表明,这里的
与任何任意类型参数
T
完全相同,因此它可能不是存在类型

scala> def foo[M[_]](f : M[Int]) = f
foo: [M[_]](f: M[Int])M[Int]


scala> def foo[M[T]](f : M[Int]) = f
foo: [M[T]](f: M[Int])M[Int]
还要注意下面的Scala语言规范的第4.4节,这也表明
\uuu
与这里的
T
相同

有人能解释一下这是怎么回事吗


M[\u]
在该上下文中(即作为类型参数声明)是一种更高级的类型(有时称为“类型构造函数”);正如您所说,它与
M[X]
相同,
\uu
只是意味着我们不会重复使用这个名称

在不同的上下文中(例如,作为一个类型),相同的语法有时用于表示存在类型
M[X]或某些{type X}

不幸的是,语法看起来是一样的,但它们是两个不同的、不相关的特性。如果您不清楚
的特定用法是哪一种,请检查编译器/语言功能警告是什么?在我自己的代码中,我总是尝试显式地编写存在类型(使用
for some
),以避免这种混淆,但这只是我想到的,不是库倾向于遵循的规则