答案 0 :(得分:0)
您正在同伴对象Stream
上调用Stream.apply
。
apply
方法有签名:
def apply(as: A*): Stream[A]
特别是,没有通过=>
按名称传递的参数。因此,立即评估传递给apply
的每个参数。在这里,立即评估(1/0)
,并抛出异常。
如果您想懒惰地评估第二个元素,可以使用fill
:
val s = 42 #:: Stream.fill(1){ 1/0 } // works
s.take(2).toList // throws exception
答案 1 :(得分:0)
Stream.apply
功能(当您执行Stream(...)
时,您正在调用的功能)并未按名称使用其参数。
来自scala.collection.immutable.Stream。
def apply[A](xs: A*): Stream[A]
所以它需要所有的论据"通常"办法。您的1/0
在被放入流之前正在进行评估。