2015-10-14 79 views
1

我有兩個問題。第一個:是code一個純粹的表情?Scala中的純表達式意味着什麼?

lazy val code: Unit = { 

    // block of code 

    var s = "abc" 
    for (i <- 0 until 10) println(i) 
    s += s concat "def" 
    println(s) 

} 

而第二個:純表達式是什麼意思?這是一個不返回任何東西的代碼嗎?

回答

5

純表達式是一種計算,僅用於產生結果值 - 它沒有副作用。在上述字段code的情況下,您打電話向控制檯(println)打印內容,這被認爲是副作用,因此它不是純表達式。一個純粹的表達的一個例子是這樣的:

lazy val foo = 2 + 3 

它什麼都不做除了產生foo終值,並能安全地通過計算(5)的結果,而不會改變的結果被替換程序以任何方式。如果你在上面的代碼進行這樣的替換:

lazy val code: Unit =() 

你會改變程序 - 它不再打印任何東西到控制檯。

例如,有關純函數和純表達式的更多信息及其在函數式編程中的重要性,請看here

+0

有趣!那麼'code'的真正類型是什麼?該塊包含四行有用的代碼。我認爲它應該是這種塊的一些對象表示。我對嗎? – Finkelson

+0

'code'的類型就像你編寫的那樣:'Unit'(相當於Java中的'void')。它不等於定義它的代碼塊。可能你打算使用'def'而不是'lazy val'?這定義了一個函數等於後面的代碼塊,並且可以反覆調用(每次向控制檯打印更多行)。進一步調用上面的懶惰值只會返回'()'('Unit'的唯一實例的表示),它不會重新執行代碼塊。 – Shadowlands

+0

> **它不等於定義它的代碼塊** – Finkelson

相關問題