如何在Scala中将列表更改为元组?

时间:2014-08-14 20:40:19

标签: list scala tuples

我有一系列操作,结果打包在一个元组中,作为方法的参数给出。

  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作为输入,但是如果可能的话我想要有元组解决方案。

1 个答案:

答案 0 :(得分:0)

在编译时已知一个元组的arity。列表的arity只在运行时才知道。您几乎肯定不会从运行时将列表转换为元组获得任何利润。

在您的示例中,fn应该具有固定数量的参数,四个。使用四号列表对您没有帮助。您可能会在元组上查找map方法,但它不存在:

(1, 2, 3, 4).map(_ + 1)   // method not found

有关使用Shapeless库提供此类功能的方法,请参阅this question and answer