为什么在从迭代器创建新的Iterable时要计算迭代器? >scala>val myI=new Iterable[Int]{def iterator=iterator.continuously(1)} >java.lang.OutOfMemoryError:java堆空间 >位于java.util.Arrays.copyOf(Arrays.java:2882) >

为什么在从迭代器创建新的Iterable时要计算迭代器? >scala>val myI=new Iterable[Int]{def iterator=iterator.continuously(1)} >java.lang.OutOfMemoryError:java堆空间 >位于java.util.Arrays.copyOf(Arrays.java:2882) >,scala,scala-collections,Scala,Scala Collections,现在,这是预期的行为吗?我觉得这有点奇怪,它挡住了我的去路。这只是REPL努力想提供帮助——它试图打印出新的Iterable,作为它在返回值时所做工作的一部分。您可以将其粘贴到某个不打印其内容的容器中,也可以覆盖toString > scala> val myI = new Iterable[Int]{def iterator = Iterator.continually(1)} > java.lang.OutOfMemoryError: Java heap space &g

现在,这是预期的行为吗?我觉得这有点奇怪,它挡住了我的去路。

这只是REPL努力想提供帮助——它试图打印出新的
Iterable
,作为它在返回值时所做工作的一部分。您可以将其粘贴到某个不打印其内容的容器中,也可以覆盖
toString

> scala> val myI = new Iterable[Int]{def iterator = Iterator.continually(1)} 
> java.lang.OutOfMemoryError: Java heap space
>   at java.util.Arrays.copyOf(Arrays.java:2882)    at
> <snip>
scala> val myI = new Iterable[Int] { def iterator = Iterator.continually(1); 
     |   override def toString = "myI" }
myI: Iterable[Int] = myI