如果我正确解释你的问题,你想这样做:
val ex: List[List[Int]] = {
val ex = List(List(1, 2, 3), List(4, 5, 6), List(7, 8, 9))
ex ++ ex
}
这不是一个循环定义,因为内部ex
只是遮蔽了外部(如果您使用不同的变量名称会更清楚)。
如果您确实想要递归定义,则需要使用惰性数据结构,例如Stream
(您可以尝试使用List
,但您会得到NullPointerException
)。所以你可以这样写:
val ex: Stream[List[Int]] =
Stream(List(1, 2, 3), List(4, 5, 6), List(7, 8, 9)) #::: (ex take 3)
ex.toList // if it actually needs to be a List, which is probably doesn't
#:::
是on的惰性Stream
等价物。:::
List
如果您追加ex
而不是ex take 3
thenex
将是无限的,您可以使用(ex take 6).toList
.
编辑:在阅读@AmigoNico 对您的问题的解释(这可能是正确的解释 - 但谁知道!)之后,您也可以使用该iterate
函数执行此操作,例如
List.iterate(List(1,2,3), 3)(_ map (_ * 2))
// List(List(1, 2, 3), List(2, 4, 6), List(4, 8, 12))
// or if you want it infinte:
val xs = Stream.iterate(List(1,2,3))(_ map (_ * 2))
(xs take 3).toList
// result same as above