scala 傳值呼叫,傳名呼叫

2022-06-18 21:42:16 字數 543 閱讀 6378

scala的直譯器在解析函式引數(function arguments)時有兩種方式:

在進入函式內部前,傳值呼叫方式就已經將引數表示式的值計算完畢,而傳名呼叫是在函式內部進行引數表示式的值計算的。這就造成了一種現象,每次使用傳名呼叫時,直譯器都會計算一次表示式的值。

傳名呼叫時, 接受表示式的形參定義一般是: block: =>unit   , 沒有形參,返回型別unit 

demo:

def test(code: => unit)

def test1(code: () => unit) 

//開始測試

test

println(".................")

test1

結果:

start

when evaluated

bbend

.................

bbstart

when evaluated

end

Scala 傳值呼叫和傳名呼叫

傳值呼叫時,引數只在呼叫時計算一次,後續重複使用計算的結果 傳名呼叫時,引數在呼叫時不會計算,只有真正用到引數的時候才會計算 x int object scalafunction def printbyname x int unit def printbyvalue x int unit def m...

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

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

傳值呼叫和傳名呼叫

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