通常函式/方法的引數是傳值引數,也就是說,引數的值在傳遞給函式之前已經確定好了。而在scala中,方法或函式的引數可以是乙個表示式,也就是可以將乙個**邏輯傳遞給某個方法或著函式。(這有點像c語言)1.scala的傳值呼叫(call-by-value),引數是乙個或多個型別的變數
2.scala的傳名呼叫(call-by-name),引數傳的是函式/方法名,即函式/方法(一段邏輯)
object callbynameandvalue
//數數每次扣完剩多少錢
def shuqian():int=
//方法printbyvalue的引數是乙個int型別的變數
def printbyvalue(x:int)=元")
}} //方法printbyname的引數是乙個無參,返回值為int型別的函式(x: => int 表示的是乙個方法的簽名)
def printbyname(x: => int)=元")//該方法無返回值,直接在方法體輸出結果
}} def main(args: array[string]): unit =
}
//傳值呼叫
測試: 95元
測試: 95元
測試: 95元
//傳名呼叫
每次都算算還剩: 95元
每次都算算還剩: 90元
每次都算算還剩: 85元
每次都算算還剩: 80元
再看乙個:
object calculate
//定義乙個函式,有2個int型別引數,且返回值為引數相乘結果
val fa:(int,int)=>int=(a,b)=>a*b
//add1方法有2個引數:第乙個引數是擁有乙個int型別、返回值為int的函式
//可以不寫返回值型別,編譯器可自動推測
def add1(c:int =>int,d:int)=
//定義乙個擁有1個引數的函式
// val c:int=>int=e=>e*5
val c=(e:int)=>e*5
def main(args: array[string]): unit =
}
scala 傳值呼叫,傳名呼叫
scala的直譯器在解析函式引數 function arguments 時有兩種方式 在進入函式內部前,傳值呼叫方式就已經將引數表示式的值計算完畢,而傳名呼叫是在函式內部進行引數表示式的值計算的。這就造成了一種現象,每次使用傳名呼叫時,直譯器都會計算一次表示式的值。傳名呼叫時,接受表示式的形參定義一...
Scala 傳值呼叫和傳名呼叫
傳值呼叫時,引數只在呼叫時計算一次,後續重複使用計算的結果 傳名呼叫時,引數在呼叫時不會計算,只有真正用到引數的時候才會計算 x int object scalafunction def printbyname x int unit def printbyvalue x int unit def m...
傳值呼叫和傳名呼叫
共用 傳值呼叫和傳名呼叫 var money 100 定義乙個花錢的方法 花錢 def buy unit 查詢 def see 當傳入引數為乙個具體的數值時,引數的值一旦確定,就不會改變。def value x int unit value see 執行結果 money 95 money 95 mo...