以下代码是 shapeless 用例之一的典型演示:
def getHList[P <: Product, F, L <: HList](p: P)(implicit gen: Generic.Aux[P, L]): L = {
gen.to(p)
}
val v = getHList(1, 2, 3, 4, 5, 6, 7, 8, 9)
这给出了正确的结果,不幸的是,它依赖于 scala 的元组语法 suger,并且在参数数量 > 22 时不起作用:
val v = getHList(1, 2, 3, 4, 5, 6, 7, 8, 9, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0)
(this generates an error that looks this the follow)
[Error] /xxx/HListSuite.scala:41: 29 more arguments than can be applied to method getHList: (p: P)(implicit gen: shapeless.Generic.Aux[P,L])L
one error found
FAILURE: Build failed with an exception.
我想知道是否有一个宏或其他 scala 功能可以用来打破这个限制,有什么建议吗?
我使用的是 scala 2.12.8,但可以随时升级到 2.13。