首页 > 解决方案 > Scala如何在元组中指定元组的返回类型

问题描述

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

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

并称之为例如:

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

我可以使用Anytype 来编译它,但我更喜欢特定的东西。有什么建议么?我已经研究过,但在其他地方没有发现这个特定的问题。

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

标签: scala

解决方案


我相信这在 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 */ }
}

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

def tupleReturnType(): (Product, Int) 

推荐阅读