我今天在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”,其中包含元组中的值列表。你知道实现它的方法吗?
我也会在'模式匹配'中搜索网页,如果我找到它,就把答案放在这里。
感谢您的帮助!
奥利弗
答案 0 :(得分:1)
使用List
或其他类型的集合肯定会更容易,但是如果你真的被各种长度的元组所困,那么我认为你必须丢弃模式匹配。
相反,您可能必须传递元组t =>
,然后使用t.productArity
,t.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))