为什么在从它创建新的Iterable时评估迭代器?

时间:2013-06-22 12:06:28

标签: scala scala-collections

> 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>

现在,这是预期的行为吗?我发现它有些奇怪,它会妨碍我。

1 个答案:

答案 0 :(得分:10)

这只是REPL尝试太难以提供帮助 - 它正在尝试打印出新的Iterable,作为返回值时它的作用的一部分。您可以将其粘贴在某些不打印其内容的容器中,也可以覆盖toString

scala> val myI = new Iterable[Int] { def iterator = Iterator.continually(1); 
     |   override def toString = "myI" }
myI: Iterable[Int] = myI