Scala 如何在case模式匹配中放置任意大元组?

Scala 如何在case模式匹配中放置任意大元组?,scala,stream,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”。你知道实现它的方法吗 我也会在网上搜索“模式匹配”,如果找到答案,就把答案放在这里 谢谢你的帮

今天我在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”。你知道实现它的方法吗

我也会在网上搜索“模式匹配”,如果找到答案,就把答案放在这里

谢谢你的帮助


olivier

您可以拥有任意长度的匹配
列表
。不确定您想做什么,但这里有一种方法:

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))

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


相反,您可能需要传递元组
t=>
,然后使用
t.productArity
t.productElement()
、和/或
t.productIterator
来检查元组并构建相同配置文件的返回元组。

用列表代替元组怎么样?是的,你们都是对的,我意识到正确的方法是使用示例数组。但无论如何,我喜欢给出元组可用方法的答案。谢谢