`*` 在泛型中是什么意思?
What does the `*` mean in a generic type?
我在学习 Cats 库时发现 *
是一个通用类型,例如:
implicit def catsDataSemigroupKForValidated[A](implicit A: Semigroup[A]): SemigroupK[Validated[A, *]] =
new SemigroupK[Validated[A, *]] {
def combineK[B](x: Validated[A, B], y: Validated[A, B]): Validated[A, B] = x match {
case v @ Valid(_) => v
case Invalid(ix) =>
y match {
case Invalid(iy) => Invalid(A.combine(ix, iy))
case v @ Valid(_) => v
}
}
}
我的猜测是使用了*
,因为combineK
方法return Validated[A, B]
所以不需要指定泛型类型。或者它可以是 Any
类型(建议使用 Inteliij)。我会很高兴你的解释。
您正在查看的猫代码是 master 分支,它用于 Dotty (Scala 3)。 *
是3.0中的类型参数占位符:
https://dotty.epfl.ch/docs/reference/changed-features/wildcards.html
请注意,它已在 3.2 中弃用并在 3.3 中移除以支持 _
。
编辑
实物投影插件中也用到了
我在学习 Cats 库时发现 *
是一个通用类型,例如:
implicit def catsDataSemigroupKForValidated[A](implicit A: Semigroup[A]): SemigroupK[Validated[A, *]] =
new SemigroupK[Validated[A, *]] {
def combineK[B](x: Validated[A, B], y: Validated[A, B]): Validated[A, B] = x match {
case v @ Valid(_) => v
case Invalid(ix) =>
y match {
case Invalid(iy) => Invalid(A.combine(ix, iy))
case v @ Valid(_) => v
}
}
}
我的猜测是使用了*
,因为combineK
方法return Validated[A, B]
所以不需要指定泛型类型。或者它可以是 Any
类型(建议使用 Inteliij)。我会很高兴你的解释。
您正在查看的猫代码是 master 分支,它用于 Dotty (Scala 3)。 *
是3.0中的类型参数占位符:
https://dotty.epfl.ch/docs/reference/changed-features/wildcards.html
请注意,它已在 3.2 中弃用并在 3.3 中移除以支持 _
。
编辑
实物投影插件中也用到了