6

我意识到这可能是一个简单的问题,但在下面的代码行中实现的 '#::' 是什么。它是一个特殊的缺点吗?

def from(n: Int): Stream[Int] = n #:: from(n + 1)
4

4 回答 4

11

此运算符用于构造而不是列表。考虑具有简单缺点的相同代码片段:

def from(n: Int): List[Int] = n :: from(n + 1)

运行此方法将导致StackOverflowError. 但是Stream[Int]只有在需要时才对 tail 进行延迟评估(并且记住已经计算的值)。

于 2012-11-15T22:16:56.937 回答
6

它等同于::for Lists,但与 Streams 一起使用

也就是说,n成为流的头部from(n+1)尾部在哪里

于 2012-11-15T22:15:49.587 回答
1

这意味着创建一个 Stream 对象。

它与consfor List 相同——而不是::总是创建一个 List,而是#::总是创建一个 Stream。

于 2012-11-15T22:31:28.370 回答
0

有点晚了,但是有http://scalex.org/可以很好地锁定这些东西(谷歌对任何非字母数字的东西真的一团糟)!祝你好运!

于 2013-02-24T12:07:05.763 回答