我有一系列操作,结果打包在一个元组中,作为方法的参数给出。
val bs = byteArrayToBitSet(ba)
val d = bs.filter(_ < dBits)
val c = ...
val b = ...
val a = ...
val r = (f(a), f(b), f(c), f(d)) // <--
((fn _).tupled)(r)
我想修改这样的元组生成代码:
val r = List(a,b,c,d).map(f(_)) // returns List not tuple
我需要将List更改为元组才能使用((fn _).tupled)(r)
。我怎样才能做到这一点?
如果没有办法将列表转换为元组,我可能会想出一个新的方法将List作为输入,但是如果可能的话我想要有元组解决方案。
答案 0 :(得分:0)
在编译时已知一个元组的arity。列表的arity只在运行时才知道。您几乎肯定不会从运行时将列表转换为元组获得任何利润。
在您的示例中,fn
应该具有固定数量的参数,四个。使用四号列表对您没有帮助。您可能会在元组上查找map
方法,但它不存在:
(1, 2, 3, 4).map(_ + 1) // method not found
有关使用Shapeless库提供此类功能的方法,请参阅this question and answer。