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也帮不上忙:您需要预先了解所有类型才能使用它,这是一个不同的用例。非常好的建议。但问题是我事先不知道可能的类型。但我可以让客户以某种方式传递它们。也可以使用可变大小的类型标记吗?