scala求值策略

2021-08-02 14:24:24 字數 891 閱讀 7316

關於scala中求值策略的相關問題

scala裡有兩種求職策略:

call by value按值進行呼叫,對函式實參求值,且僅求值一次,求到的值會傳入函式,直接替換掉函式裡面所對應的形式引數

call by name按名呼叫,在進行函式呼叫的時候不會對函式的實參進行表示式的求值,而是把表示式傳入函式體內,替換掉函式體內所對應的形式引數,在函式體內每次使用到這個形參的時候,會進行求值,即進行函式實參每次在函式體內被用到時都會求值

scala通常使用

call by value

,如果函式形參型別以 「=>」 開頭,那麼會使用call by name

def foo(x: int) = x    //call by value

def foo(x: => int) =x  //call by name

求職策略的例子

例1 ,

call by value

,先計算

test(7,8)

,再計算

7*7,最後得49

例2 ,

call by name

,先計算

test(3+4,8)

,再計算

(3+4)*(3+4)

,然後計算

(7)*(3+4)

,再計算

7*7,最後得49

延遲求值主動求值

using system using system.collections.generic using system.componentmodel.dataannotations.schema using system.linq using system.net.sockets using syst...

Scala12 Scala高階函式

scala混合了物件導向和函式式的特性,我們通常將可以作為引數傳遞到方法中的表示式叫做函式。在函式式程式語言中,函式是 頭等公民 高階函式包含 作為值的函式 匿名函式 閉包 柯里化等等。可以像任何其他資料型別一樣被傳遞和操作的函式。定義函式時格式 val 變數名 輸入引數型別和個數 函式實現和返回值...

Scala七 Scala核心一 函式

1.如果函式體只有一行 則可以不用寫 比如 def print x int println x 一行上的多條語句用分號隔開,則只有第一句屬於方法體,例如 def printwithvalue x int string println x abc 上面的 報錯,因為,printwithvalue的方法...