Scala 傳值呼叫和傳名呼叫

2021-10-09 11:01:25 字數 528 閱讀 9203

傳值呼叫時,引數只在呼叫時計算一次,後續重複使用計算的結果

傳名呼叫時,引數在呼叫時不會計算,只有真正用到引數的時候才會計算(x:=> int)

object scalafunction 

def printbyname

(x:=

>int)

: unit =

} def printbyvalue

(x:int)

: unit =

} def main

(args: array[string]

): unit =

}

結果如下98

7654

4444

原因是:傳名呼叫=> 在println時重新計算一次x的值,而x的值跟count函式有關,會繼續計算,所以輸出結果一次減小

傳值呼叫,:int 在第一次println時,計算一次,結果為4,迴圈繼續println時,計算的結果重複利用,即:將計算的結果(值)傳到這個方法內,後續使用過程中直接取值。

scala 傳值呼叫,傳名呼叫

scala的直譯器在解析函式引數 function arguments 時有兩種方式 在進入函式內部前,傳值呼叫方式就已經將引數表示式的值計算完畢,而傳名呼叫是在函式內部進行引數表示式的值計算的。這就造成了一種現象,每次使用傳名呼叫時,直譯器都會計算一次表示式的值。傳名呼叫時,接受表示式的形參定義一...

傳值呼叫和傳名呼叫

共用 傳值呼叫和傳名呼叫 var money 100 定義乙個花錢的方法 花錢 def buy unit 查詢 def see 當傳入引數為乙個具體的數值時,引數的值一旦確定,就不會改變。def value x int unit value see 執行結果 money 95 money 95 mo...

Scala的傳值呼叫與傳名呼叫理解

通常函式 方法的引數是傳值引數,也就是說,引數的值在傳遞給函式之前已經確定好了。而在scala中,方法或函式的引數可以是乙個表示式,也就是可以將乙個 邏輯傳遞給某個方法或著函式。這有點像c語言 1.scala的傳值呼叫 call by value 引數是乙個或多個型別的變數 2.scala的傳名呼叫...