Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/scala/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
让Scala根据参数长度为我推断类型_Scala_Types_Type Inference - Fatal编程技术网

让Scala根据参数长度为我推断类型

让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,

函数或元组等具有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, 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我不会说这个问题是“错误的”-这绝对是一件合理的事情,如果你愿意使用宏或不成形,你可以得到很多方法。