Scala 學習(二) 方法和函式

2022-07-19 00:06:19 字數 2366 閱讀 3867

一,方法和函式

1.1 方法的定義和呼叫

1.2 函式的定義和呼叫

二,傳值呼叫和傳名呼叫

三,函式的引數

3.1 可變引數函式

3.2 預設引數函式

四,高階函式

五,函式高階使用

5.1 柯里化(currying)

5.2 偏函式

方法的返回值型別可以不寫,編譯器可以自動推斷出來,但是對於遞迴函式,必須指定返回型別:

object demotwo 

def main(args: array[string]): unit =

}

方式一:

呼叫: f1(2) , 其中 f1 為函式的引用, 也可以叫做函式名. function1 表示乙個引數的函式.

方式二:

下面為沒有任何引數的函式, 函式的返回值為 int 型別.

通常,函式的引數是傳值引數; 也就是說,引數的值在傳遞給函式之前確定。其實, 在 scala 中, 我們方法或者函式的引數可以是乙個表示式, 也就是將乙個**邏輯傳遞給了某個方法或者函式.

object demotwo 

val f1 = (x: int) => x * 10def main(args: array[string]): unit =

// f1 傳遞的是函式名,6傳遞的是值

}

//

定義乙個可變引數的方法

def methodmanyparams(a: string*) =}//

呼叫methodmanyparams("中華", "人民", "共和國")

//

帶預設的引數列表

def add(a: int = 1, b: int = 7): int =")

a +b}//

呼叫add(2) //

帶有預設值 a 的引數, 呼叫時可以不傳 add(b=9, a=2)

//呼叫時, 可以指定具體的引數值

add(b=18) //

呼叫如果執行修改某乙個具體的引數值的話, 可以指定引數名稱

將其他函式作為引數或其結果是函式的函式就叫高階函式。

//

高階函式: 將其他函式作為引數或其結果是函式的函式

//定義乙個方法, 引數為帶乙個整型引數返回值為整型的函式 f 和 乙個整型引數 v, 返回值為乙個函式

//定義乙個方法, 引數為乙個整型引數, 返回值為 string

def layout(x: int) = "[" + x.tostring() + "]"

//

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

//

我們看下這個方法的定義, 求 2 個數的和

def add(x: int, y: int) = x + y

//那麼我們應用的時候,應該是這樣用:add(1,2)

//現在我們把這個函式變一下形:

def add(x:int)(y:int) = x +y

//那麼我們應用的時候,應該是這樣用:add(1)(2),最後結果都一樣是 3,這種方式(過程)就叫柯里化。經過柯里化之後,函式的通用性有所降低,但是適用性有所提高。

//分析下其演變過程

def add(x: int) = (y: int) => x +y

//(y: int) => x + y 為乙個匿名函式, 也就意味著 add 方法的返回值為乙個匿名函式

//那麼現在的呼叫過程為

val result = add(2)

val sum1 = result(3)

val sum2 = result(8)

偏函式:只有乙個引數的函式。

object demotwo 

//定義偏函式 def 函式名:partialfunction(引數型別,返回值型別)=,如下例項

def fun: partialfunction[string, int]=

}

Scala 方法和函式

目錄 方法的定義 函式 定義方式 方法和函式的相互轉換 遞迴函式優化 高階函式 scala 函式柯里化 currying 柯里化 閉包 def functionname 引數列表 return type abstract class test scala 方法是類的一部分,而函式是乙個物件可以賦值給...

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...