我正在尝试在元组中指定元组的返回类型:
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)
}
我可以使用Any
类型来编译它,但是我更喜欢特定的东西。有什么建议么?我已经研究过,但没有在其他地方找到这个具体问题。
我尝试将()
用作类型,但是编译失败。
答案 0 :(得分: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 */ }
}
在这里我们可以看到TupleN实例的最接近的公共超类型是scala.Product
,所以您可以说:
def tupleReturnType(): (Product, Int)