“ *”在一般类型中是什么意思?

时间:2020-05-02 19:50:27

标签: scala generics scala-cats

我正在学习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方法返回Validated[A, B],因此不需要指定泛型。也可以是Any类型(建议使用Inteliij)。我很高兴您的解释。

1 个答案:

答案 0 :(得分:1)

您正在查看的cats代码是master分支,用于Dotty(Scala 3)。 *是3.0中的类型参数占位符:

https://dotty.epfl.ch/docs/reference/changed-features/wildcards.html

请注意,它已在3.2中被弃用,在3.3中已被_取代。


编辑

它还用于实物投影仪插件