關於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