编译运行时列表的长度相等的时间强制执行

时间:2015-09-29 06:52:26

标签: scala shapeless type-level-computation

假设我有一个数字adxl34x_i2c_probe的运行时列表,我在编译时不知道的长度,例如

Int

我还有一个带numbers: Seq[Int]元素并返回Int的函数,例如

A

我有另一个函数,它接受f: Int => A元素并返回Int,例如

B

如果我分别使用g: Int => Bf映射列表,我最终会得到2个列表:

g

有没有办法让我编写一个与这两个列表一起使用的函数,并确保在编译时两个元素的数量相同?

由于val list1: Seq[A] = numbers.map(f) val list2: Seq[B] = numbers.map(g) list1 list2来自同一个列表map),我认为可以使用Shapeless' numbers,但在编译时不知道Sized的长度,我无法弄清楚如何做到这一点。

1 个答案:

答案 0 :(得分:4)

解决这个问题的一个低技术解决方案是避免首先创建两个单独的列表,

val list12: Seq[(A, B)] = numbers.map { i => (f(i), g(i)) }

我建议在部署重型火炮之前探索这条大道。

相关问题