關於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的方法...