2012-11-15 59 views
6

我意識到這可能是一個簡單的問題,但'#::'是在下面的代碼行中實現的。這是一個特殊的利弊嗎?運營商#::是什麼意思?

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

您必須參加Scala類中的函數式編程。我同意Pere的回答。 – cainj

回答

11

該運算符用於構造streams而不是列表。考慮使用簡單缺點的相同代碼片段:

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

運行此方法將導致StackOverflowError。但是Stream[Int]尾巴只有在需要時才被懶惰地評估(並且已經計算過的值會被記住)。

+0

,因爲使用'def'的值不會被記住;) – sschaef

+1

@sschaef:true,'val stream = from(0)'would be used to,thanks。 –

6

這是相當於::用於解釋,但與流使用

即,n成爲流的其中from(n+1)

1

它意味着創建一個Stream對象。

它與列表cons相同 - 而不是::總是創建一個列表,#::總是創建一個流。

0

有些晚了,但有http://scalex.org/這是真的很好鎖定這樣的事情(谷歌真的是一個非字母數字的東西)!祝你好運!