我意识到这可能是一个简单的问题,但在下面的代码行中实现的 '#::' 是什么。它是一个特殊的缺点吗?
def from(n: Int): Stream[Int] = n #:: from(n + 1)
我意识到这可能是一个简单的问题,但在下面的代码行中实现的 '#::' 是什么。它是一个特殊的缺点吗?
def from(n: Int): Stream[Int] = n #:: from(n + 1)
此运算符用于构造流而不是列表。考虑具有简单缺点的相同代码片段:
def from(n: Int): List[Int] = n :: from(n + 1)
运行此方法将导致StackOverflowError
. 但是Stream[Int]
只有在需要时才对 tail 进行延迟评估(并且记住已经计算的值)。
它等同于::
for Lists,但与 Streams 一起使用
也就是说,n
成为流的头部from(n+1)
,尾部在哪里
这意味着创建一个 Stream 对象。
它与cons
for List 相同——而不是::
总是创建一个 List,而是#::
总是创建一个 Stream。
有点晚了,但是有http://scalex.org/可以很好地锁定这些东西(谷歌对任何非字母数字的东西真的一团糟)!祝你好运!