`*` 在泛型中是什么意思?

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 中移除以支持 _


编辑

实物投影插件中也用到了