2014年11月15日 星期六

[Scala][教學] Call by Name or Call By Value?

        今天再看scala的教學課程看到的小觀念,記錄下來怕以後搞混。Scala再讀入參數的時候有兩種方式,預設是call by value,但是也可以改成call by name。兩者的差異在於:

Call by Value(default,透過x: Int的方式設定):呼叫函數的時候一併將值讀入。
Call by Name(透過x: => Int的方式設定):當函式碰到值的時候才去取值。

其實這兩種方式都不會影響到值,而是發生在值以外的side-effect。直接看範例比較快,這次的範例參考以下網址:http://stackoverflow.com/questions/13337338/call-by-name-vs-call-by-value-in-scala-clarification-needed



寫程式如果在設定參數時注意一下囉,感覺可以用call by name的特性來製造簡單的遞迴~






1 則留言:

  1. 修正一下程式碼,gist不知道為什麼不讓我改
    def callByName(x:=> Int) = {
    println("x1="+x)
    println("x2="+x)
    }

    回覆刪除