我意识到这可能是一个简单的问题,但是'#::'在下面的代码行中实现了什么。这是一个特殊的缺点吗?
def from(n: Int): Stream[Int] = n #:: from(n + 1)
答案 0 :(得分:11)
此运算符用于构造streams而不是列表。考虑使用简单缺点的相同代码片段:
def from(n: Int): List[Int] = n :: from(n + 1)
运行此方法将导致StackOverflowError
。但是Stream[Int]
尾部仅在需要时才会被懒惰地评估(并且已记住已计算的值)。
答案 1 :(得分:6)
它相当于列表的::
,但与Streams
也就是说,n
成为<{1}}是尾
答案 2 :(得分:1)
这意味着要创建一个Stream对象。
与列表的cons
相同 - 而不是始终创建列表的::
,#::
始终会创建一个流。
答案 3 :(得分:0)
有些晚了,但有http://scalex.org/非常好的锁定这些东西(谷歌真是乱七八糟的非字母数字)!祝你好运!