目錄
一 函數是第一等公民
1、把函數作爲實參傳遞給另外一個函數。
2、把函數作爲返回值。
3、把函數賦值給變量。
4、把函數存儲在數據結構裏。
在Scala中,函數就像普通變量一樣,同樣也具有函數的類型。
二 函數類型
1、定義
在Scala語言中,函數類型的格式爲A =>B,表示一個接受類型A的參數,並返回類型B的函數。
例子:Int => String 是把整型映射爲字符串的函數類型
2、代碼
package test_first
object DemoextendsApp{
println( apply( layout,10))
// 函數 f 和 值 v 作爲參數,而函數 f 又調用了參數 v
def apply(f:Int=>String, v:Int)= f(v)
def layout(x:Int)="["+ x.toString()+"]"
def operate(f:(Int,Int)=>Int)={f(4,4)}
def add(x:Int,y:Int)=x+y
println(operate(add))
def greeting()=(name:String)=>{"hello"+" "+ name}
val test = greeting()
println(test("cakin24"))
def multiplyBy(factor:Double)=(x:Double)=>factor*x
val x=multiplyBy(10)
println(x(50))
}
3、運行結果
[10]
8
hello cakin24
500.0
三 高階函數
1、定義
用函數作爲形參或返回值的函數,稱爲高階函數。
def operate(f:(Int,Int)=>Int)={f(4,4)}
def greeting() =(name:String) =>{"hello" + " " + name}
2、代碼
package test_first
object DemoextendsApp{
println( apply( layout,10))
// 函數 f 和 值 v 作爲參數,而函數 f 又調用了參數 v
def apply(f:Int=>String, v:Int)= f(v)
def layout(x:Int)="["+ x.toString()+"]"
}
3、運行結果
[10]
四 匿名函數
就是函數常量,也稱爲函數文字量。
在Scala裏,匿名函數的定義格式爲
(形參列表) =>{函數體}
箭頭左邊是參數列表,右邊是函數體。
使用匿名函數後,我們的代碼變得更簡潔了。
1、匿名函數爲1個參數。
var inc = (x:Int) => x+1
以上實例的 inc 現在可作爲一個函數,使用方式如下:
var x = inc(7)-1
2、匿名函數中定義多個參數:
var mul = (x: Int, y: Int) => x*y
mul 現在可作爲一個函數,使用方式如下:
println(mul(3, 4))
3、不給匿名函數設置參數
如下所示:
var userDir = () => { System.getProperty("user.dir") }
userDir 現在可作爲一個函數,使用方式如下:
println( userDir() )
五 匿名函數實例
package test_first
object DemoextendsApp{
var factor =3
val multiplier =(i:Int)=> i * factor
println("multiplier(1) value = "+ multiplier(1))
println("multiplier(2) value = "+ multiplier(2))
}