如何在与案例的模式匹配中放置一个任意的大元组?

时间:2015-07-03 15:15:22

标签: scala stream

我今天在stackoverflow上发布了一些问题,但我正在处理的问题需要比预期更复杂的代码。

我有这段代码:

val nsc1= Stream.iterate((1,0,1,1))({case (a,b,c,d) => (b,c,d,b+c)}) map (c=> c._1)

这里流的初始值是Tuple4,但我需要管理它的任意大小。 问题实际上不是初始参数,而是“case”,其中包含元组中的值列表。你知道实现它的方法吗?

我也会在'模式匹配'中搜索网页,如果我找到它,就把答案放在这里。

感谢您的帮助!

奥利弗

2 个答案:

答案 0 :(得分:1)

使用List或其他类型的集合肯定会更容易,但是如果你真的被各种长度的元组所困,那么我认为你必须丢弃模式匹配。

相反,您可能必须传递元组t =>,然后使用t.productArityt.productElement()和/或t.productIterator来检查元组并构建元组的返回元组相同的个人资料。

答案 1 :(得分:0)

您可以拥有与List匹配的任意长度。不确定你要做什么,但这是一种方法:

Stream.iterate( List(1,0,1,1) ){ 
    case List(a,b,c,d) => List(b,c,d,b+c)
    case List(a,b,c) => List(a)
    case List(a,b) => List(a)
    case List(a) => List(a)
} map(_(0))