scala 在带大小写的模式匹配中如何放置任意的大元组?

dhxwm5r4  于 2023-01-13  发布在  Scala
关注(0)|答案(2)|浏览(123)

今天我在Stack Overflow上发布了一些问题,但是我正在处理的问题需要比预期更复杂的代码。
我有这个代码:

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

这里流的初始值是一个Tuple4,但是我需要管理它的任意大小。实际上问题不在于初始参数,而在于元组中的值列表的"case"。我该如何实现呢?
我也会在网上搜索"模式匹配",如果找到答案,就把它放在这里。

unftdfkk

unftdfkk1#

使用List或其他类型的集合当然会更容易,但是如果您 * 真的 * 被各种长度的元组所困扰,那么我认为您必须放弃模式匹配。
相反,您可能必须传递元组t =>,然后使用t.productArityt.productElement()和/或t.productIterator来检查元组并构建相同概要文件的返回元组。

w8biq8rn

w8biq8rn2#

你可以有一个任意长度的匹配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))

相关问题