Scala如何在元组中指定元组的返回类型

Maz*_*r72 3 scala

我试图在元组中指定元组的返回类型:

  class First {
    def tupleReturnType(): (Any, Int) = {
      val tup = (1, 2, 3) // This can be variable in length
      val i = 4
      (tup, i)   
    }
  }
Run Code Online (Sandbox Code Playgroud)

并以它为例:

  "First Test" must "understand tuple type" in {
    val first = new First()
    val (tup, i) = first.tupleReturnType()
    assert(tup == (1, 2, 3))
    assert(i == 4)   
  }
Run Code Online (Sandbox Code Playgroud)

我可以使用Anytype 进行编译,但是我希望使用特定的东西。有什么建议么?我已经研究过,但没有在其他地方找到这个具体问题。

我尝试()作为一种类型,但编译失败。

slo*_*ouc 6

我相信Scala 3 / Dotty中的情况正在改变,但是目前,元组是TupleN带有的类的实例N = 1, 2, 3, ..., 22。因此,为了实现所需的功能,您需要某种父类型来封装所有元组类型。

下面是Tuple3看起来像:

final case class Tuple3[+T1, +T2, +T3](val _1 : T1, val _2 : T2, val _3 : T3) extends scala.AnyRef with scala.Product3[T1, T2, T3] with scala.Product with scala.Serializable {
  override def toString() : java.lang.String = { /* compiled code */ }
}
Run Code Online (Sandbox Code Playgroud)

在这里我们可以看到TupleN实例的最接近的通用超类型是scala.Product,因此可以这样说:

def tupleReturnType(): (Product, Int) 
Run Code Online (Sandbox Code Playgroud)