让Scala根据参数长度为我推断类型
函数或元组等具有Scala根据参数长度(arity)推断其类型的能力。 e、 g.让Scala根据参数长度为我推断类型,scala,types,type-inference,Scala,Types,Type Inference,函数或元组等具有Scala根据参数长度(arity)推断其类型的能力。 e、 g.(1,2)为Tuple2类型 我能用Scala做这样的东西吗 我提供我的玩具箱: implicit class EnrichedWithToTuple[A](elements: Seq[A]) { def toTuple2 = elements match {case Seq(a, b) => (a, b) } def toTuple3 = elements match {case Seq(a, b,
(1,2)为Tuple2类型
我能用Scala做这样的东西吗
我提供我的玩具箱:
implicit class EnrichedWithToTuple[A](elements: Seq[A]) {
def toTuple2 = elements match {case Seq(a, b) => (a, b) }
def toTuple3 = elements match {case Seq(a, b, c) => (a, b, c) }
def toTuple = (*elements) // what I want is Scala infer the Tuple'N' for me by arg length.
}
val tuple = List(1, 2, 3).toTuple
我认为那根本行不通。您基本上希望toTuple
具有不同的返回类型。您可以将几个match
语句放在toTuple
(而不是单独的方法)中,但是您必须返回Any
。这里有类似的问题-编译时已知方法的参数数量,但不知道任意Seq
的长度。您可以使用宏(在这种情况下,您必须给出许多Seq
值的编译时失败)或类似Shapeless的大小
,但书面上这是不可能的。谢谢,正如@TravisBrown所说,我的问题有点错误,列表长度事先不知道。@WeiChingLin我不会说这个问题是“错误的”-这绝对是一件合理的事情,如果你愿意使用宏或不成形,你可以得到很多方法。