【发布时间】:2017-05-28 23:14:51
【问题描述】:
我在 scala 代码中有 List,例如我可以从特定方法接收,并且此列表的长度可能会不时变化,我的目标是将此 List 转换为 Tuple 并具有相同的元素计数:
val lst = someComputationHere()
val tupleLst = lstToTuple(lst)
澄清
//if lst.length = 2 --> Tuple2
//if lst.length = 3 --> Tuple3
//if lst.length = 4 --> Tuple4
...............
//if lst.length = N --> TupleN
and so on
附言我宁愿不使用反射来解决这个问题
UPD
我的目标是将具有上述属性的传递列表传递给Slickmap clause。让我们考虑下一个代码快照:
query.map{ p=> (p.value1, p.value2, ... , p.valueN)}
这个值的数量是动态的,我将这个values 介绍给列表:
val lst = someComputationHere()
val tuples = toTuples(lst)//Problem is here
query.map{_ => tuples}
问题描述:query.map{} - 不通过列表,因此,我必须将具有可变长度 N 的 lst 转换为具有 N 个元素的 Tuple
【问题讨论】:
-
你这样做的目的是什么?
-
各种元组的常见超类型是
Product。 IE。val tupleLst: Product = ???这给了你一个无类型的迭代器。你希望用它做什么? -
@ pedrofurla 我需要进行此转换,因此将
List放在Tuple的映射子句中Slick以便获取具有动态可变数量的参数。不过对 Slick 来说没关系,让我们只从 Scala 代码的角度考虑这个问题,没有任何第三方库。 -
你如何处理元组?如果您只是将它们直接传递给一系列函数
TupleN => SomeType,那么您可以通过在列表上匹配并根据长度立即调度相关元组来创建一个函数List[T] => SomeType。