【发布时间】:2016-04-12 13:38:39
【问题描述】:
我有一堆SomeType[T] 类型的对象。就像其中一些是SomeType[String],一些是SomeType[Int],等等。我想编写一个函数来获取一组可变大小的这些(但可能是不同的类型)。
如果我知道类型都是相同的,我可以使用类似以下的内容:
def someFun[T](inputs: SomeType[T]*): = {
// do something here on the list of inputs.
}
任何想法如何使其通用,以便它获得具有可能不同类型的输入列表? (例如inputs: SomeType[String] 和 inputs: SomeType[Int])
顺便说一句,我不想使用SomeType[_],因为我稍后需要类型信息。
【问题讨论】:
-
这个方法返回什么类型?您可以使用通配符
SomeType[_],但您会丢失类型信息......所以答案实际上取决于该方法的主体需要什么。您实际上要寻找的是 K-list。 -
好点。我不能做
_,因为我稍后需要类型信息:-/ -
看看Shapeless'HList.
-
我认为简短的回答是,使用重复参数这是不可能的,但使用
shapeless.HList之类的东西可以实现类似的效果。 -
当你说“我不能做 _ 因为我稍后需要类型信息”时,你到底是什么意思?您需要哪种类型的信息?请记住,它们都是不同的,并且类型参数在运行时被删除。想象一下您尝试做的事情是可能的,然后发布一些示例代码,展示您将如何准确地使用这些参数。不,HList 对此也无济于事:您需要预先了解所有类型才能使用它,这是一个不同的用例。
标签: scala