Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/scala/18.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 - Fatal编程技术网

Scala 不同类型的可变大小输入

Scala 不同类型的可变大小输入,scala,Scala,我有一堆类型为SomeType[T]的对象。像它们中的一些是SomeType[String],一些是SomeType[Int],等等。我想写一个函数,它可以得到一组大小可变的字符串(但可能是不同的类型) 如果我知道这些类型都是相同的,我可以使用如下内容: def someFun[T](inputs: SomeType[T]*): = { // do something here on the list of inputs. } 有没有办法让它成为通用的,这样它就可以得到可能不同类型的

我有一堆类型为
SomeType[T]
的对象。像它们中的一些是
SomeType[String]
,一些是
SomeType[Int]
,等等。我想写一个函数,它可以得到一组大小可变的字符串(但可能是不同的类型)

如果我知道这些类型都是相同的,我可以使用如下内容:

def someFun[T](inputs: SomeType[T]*): = { 
   // do something here on the list of inputs. 
}
有没有办法让它成为通用的,这样它就可以得到可能不同类型的输入列表?(例如,
输入:SomeType[String]
输入:SomeType[Int]

顺便说一句,我不想使用
SomeType[\u]
,因为我以后需要类型信息

我不确定您需要类型信息做什么,但如果您所要做的就是直接对输入做出反应(比如说,不将其传递给另一个函数等),那么下面的方法就行了:

case class Box[A](a: A)

def someFun(boxes: Box[_]*) = 
  boxes.foreach {
    case Box(a: Int) => println(s"INT: $a")
    case Box(a: String) => println(s"STRING: $a")
    case _ => // and so on ...
  }

顺便说一句,shapeless的
HList
并不能解决这个问题,因为要让它工作,您仍然需要预先设置类型。

这个方法返回什么类型?您可以使用通配符
SomeType[\u]
,但会丢失类型信息。。因此,答案实际上取决于该方法的主体需要什么。你本质上是在寻找一个K名单,这是一个很好的观点。我不能做
,因为我以后需要类型信息:-/看一看无形状。我认为简单的回答是,重复参数这根本不可能,但使用类似于无形状的。HList可以实现类似的功能。你说的确切意思是什么“我不能这样做,因为我以后需要类型信息"? 您需要哪种类型的信息?请记住,它们都是不同的,并且类型参数在运行时被擦除。假设您正在尝试做的是可能的,然后发布一些示例代码,展示您将如何准确地使用这些参数。不,HList也帮不上忙:您需要预先了解所有类型才能使用它,这是一个不同的用例。非常好的建议。但问题是我事先不知道可能的类型。但我可以让客户以某种方式传递它们。也可以使用可变大小的类型标记吗?