`*`在通用类型中是什么意思?

问题描述 投票:0回答:1

我在学习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被建议)。我将非常高兴得到你的解释。

scala generics scala-cats
1个回答
1
投票

你正在看的猫的代码是主分支,是为Dotty(Scala 3)编写的。* 是3.0中的一个类型参数占位符。

https:/dotty.epfl.chdocsreferencechanged-featureswildcards.html。

需要注意的是,它在3.2中已经被废弃,在3.3中被删除,取而代之的是 _.


编辑

它也被用在实物投影仪插件中

© www.soinside.com 2019 - 2024. All rights reserved.