Scala 方法和函式

2021-09-12 14:59:31 字數 1810 閱讀 5537

目錄

方法的定義 函式

定義方式

方法和函式的相互轉換

遞迴函式優化

高階函式

scala 函式柯里化(currying)

柯里化 閉包

def functionname([引數列表]) : [return type] =
abstract class test

scala 方法是類的一部分,而函式是乙個物件可以賦值給乙個變數。

scala 中的函式則是乙個完整的物件,scala 中的函式其實就是繼承了 trait 的類的物件。

scala 中使用val語句可以定義函式,def語句定義方法。

正常遞迴函式會建立多個棧導致棧溢位,優化後不會建立新的棧,會使用前個函式的棧空間

通過註解優化遞迴函式(@annotation.tailrec),優化條件是最後乙個語句是遞迴呼叫的函式,否則報錯

def dgui(n: int,x:int): int = 

@annotation.tailrec

def dguitailrec(n: bigint, acc: bigint): bigint =

高階函式就是使用其他函式作為函式的引數,或者使用其他函式作為函式的輸出結果

test方法有兩個引數,第乙個引數是名為func的乙個函式,該函式有乙個string型別的引數,並且其返回值是unit;第二個引數是string型別的cont

test的方法體是將第二個引數cont作為第乙個引數即函式func的引數;test方法的返回值是unit

柯里化指的是將原來接受兩個引數的函式變成新的接受乙個引數的函式的過程。新的函式返回乙個以原有第二個引數為引數的函式。

def add(x:int,y:int)=x+y
def add(x:int)(y:int) = x + y
函式的currying化行為本質上也是乙個高階函式:接受現有的函式,返回新函式。 

這個例子就是對上乙個例子的currying化操作。傳入第乙個引數後返回乙個函式,然後再傳入第二個引數,完成第二個函式。這樣就講乙個高階函式拆解成兩個一階函式。

閉包是乙個函式,返回值依賴於宣告在函式外部的乙個或多個變數。

var factor = 3  

val multiplier = (i:int) => i * factor

scala函式和方法

方法的定義 方法總結 1.對於只有一行 的方法體,可以省略 2.可以不寫返回值型別 定義遞迴方法時除外,必須帶返回值型別,否則不知道返回值型別 def qiuhe x int,x int 3.定義的方法若沒有返回值,則不用寫 號,若不寫 號,即使有返回值也不返回 返回值型別為unit,其實 是uni...

Scala方法和函式

1 方法和函式定義形式不同 2 方法就是函式,函式也是物件 3 函式可以作為引數傳遞到方法中去 方法和函式的引數最多22個 def 方法名 名稱 型別,名稱 型別 def fun1 name string,age int def 方法名 名稱 型別,名稱 型別 返回值型別 def fun2 name...

Scala方法和函式

2.遞迴方法 遞迴方法要顯式的宣告函式的返回值型別 def fun num int int else printin fun num 5 3.引數有預設值的方法 def fun a int 10,b int 20 println fun b 200 b 200傳參到b lnt 20,值為210 4....