这个问题是关于_在类型构造函数中使用的,而不是在用于定义存在类型时.
所以问题是当_用作类型参数而不是类似变量时有什么区别T.例如F[_]和之间的区别F[T].
我能想到的唯一的区别是与F[_]参数本身可以有许多小孔尽可能...这是F[_]可以成为F[Int]或F[Future[Option[Int]]]等...而当你F[T]的T只能是合适的类型......是F[String]或F[Int]等.
这是正确的假设吗?并且是之间的主要区别F[_]和F[T]?还是还有更多?
将两者用作类型参数的情况如何?例如,trait Functor [F[_]]和之间有什么区别trait Functor [F[T]]?
如果将仿函数特征定义为trait Functor [F[_]]而不是trait Functor [F[T]]?那么是否存在语义差异?
引用规范:
上述范围限制被推广到嵌套类型参数子句的情况,它声明了高阶类型参数。高阶类型参数(类型参数的类型参数
t)仅在其紧邻的参数子句(可能包括更深嵌套级别的子句)和 t 的边界中可见。因此,它们的名称只能与其他可见参数的名称成对不同。由于高阶类型参数的名称因此通常无关紧要,因此它们可能用 a 表示_,它在任何地方都不可见。例子
以下是一些格式良好的类型参数子句:
Run Code Online (Sandbox Code Playgroud)[S, T] [@specialized T, U] [Ex <: Throwable] [A <: Comparable[B], B <: A] [A, B >: A, C >: A <: B] [M[X], N[X]] [M[_], N[_]] // equivalent to previous clause [M[X <: Bound[X]], Bound[_]] [M[+X] <: Iterable[X]]
因此,如果您没有界限,例如Functor [F[T]],则与Functor [F[_]].