今天我在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"。我该如何实现呢?我也会在网上搜索"模式匹配",如果找到答案,就把它放在这里。
unftdfkk1#
使用List或其他类型的集合当然会更容易,但是如果您 * 真的 * 被各种长度的元组所困扰,那么我认为您必须放弃模式匹配。相反,您可能必须传递元组t =>,然后使用t.productArity、t.productElement()和/或t.productIterator来检查元组并构建相同概要文件的返回元组。
List
t =>
t.productArity
t.productElement()
t.productIterator
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))
2条答案
按热度按时间unftdfkk1#
使用
List
或其他类型的集合当然会更容易,但是如果您 * 真的 * 被各种长度的元组所困扰,那么我认为您必须放弃模式匹配。相反,您可能必须传递元组
t =>
,然后使用t.productArity
、t.productElement()
和/或t.productIterator
来检查元组并构建相同概要文件的返回元组。w8biq8rn2#
你可以有一个任意长度的匹配
List
。不知道你要做什么,但这里有一个方法来做到这一点: