(一)函式字面量(值函式)
(二)匿名函式
(三)函式的簡化
(四)函式引數
(四)閉包
函式字面量(function literal),也稱值函式(function values),指的是函式可以賦值給變數。
一般函式具有如下形式:
而函式字面量具有如下形式:
/*
函式字面量 function literal=>左側的表示輸入,右側表示轉換操作
*/scala> val increase=(x:int)=>x+1
increase: int=> int = scala> println(increase(10))
11
//前面的語句等同於
scala> def increaseanother(x:int)=x+1
increaseanother: (x: int)int
scala> println(increaseanother(10))11
//多個語句則使用{}
val increase2=(x:int)=>
scala>println(increase2(10))
xuetu
wuyou11
//陣列的map方法中呼叫(寫法1)
scala> println(array(1
,2,3
,4).map(increase).mkstring(","))2
,3,4
,5
//匿名函式寫法(寫法2)
scala>println(array(1,2,3,4).map((x:int)=>x+1).mkstring(","))
2,3,4,5
//花括方式(寫法3)
scala> array(1,2,3,4).map.mkstring(",")
res25: string = 2,3,4,5
//省略.的方式(寫法4)
scala> array(1,2,3,4)
map mkstring(",")
res26: string = 2,3,4,5
//引數型別推斷寫法(寫法5)
scala> array(1,2,3,4)
map mkstring(",")
res27: string = 2,3,4,5
//函式只有乙個引數的話,可以省略()(寫法6)
scala> array(1,2,3,4) map mkstring(",")
res28: string = 2,3,4,5
//如果引數右邊只出現一次,則可以進一步簡化(寫法7)
scala> array(1,2,3,4) map mkstring(",")
res29: string = 2,3,4,5
//值函式簡化方式
//val fun0=1+_,該定義方式不合法,因為無法進行型別推斷
scala> val fun0=1+_
:10: error: missing parameter type for expanded function
((x$1) => 1
x$1))
//值函式簡化方式(正確方式)
scala> val
fun1=1+(_:double)
un1: double => double = scala> fun1(999)
es30: double = 1000.0
//值函式簡化方式(正確方式2)
scala> val fun2:(double)=>double=1+_
fun2: double=> double = scala> fun2(200)
res31: double = 201.0
//函式引數(高階函式)
//((int)=>string)=>string
scala> def convertinttostring(f:(int)=>string)=f
(4)convertinttostring: (f: int => string)
string
scala> convertinttostring
((x:int)=>x+" s")
res32: string = 4 s
//高階函式可以產生新的函式
//(double)=>
((double)=>double)
scala> def
multiplyby
(factor:double)=(x:double)=>factor*x
multiplyby: (factor: double)double=> double
scala> val x=multiplyby(10)
x: double=> double = scala> x(50)
res33: double = 500.0
//閉包(closure)
//(x:int)=>x+more,這裡面的more是乙個自由變數(free variable),more是乙個沒有給定含義的不定變數
//而x則的型別確定、值在函式呼叫的時候被賦值,稱這種變數為繫結變數(bound variable)
scala> (x:int)=>x+more
:8: error: not
found: value more
(x:int)=>x+more
^scala> var more=1
more: int = 1
scala>val fun=(x:int)=>x+more
fun: int=> int = scala> fun(10)
res1: int = 11
scala> more=10
more: int = 10
scala> fun(10)
res2: int = 20
//像這種執行時確定more型別及值的函式稱為閉包,more是個自由變數,在執行時其值和型別得以確定
//這是乙個由開放(free)到封閉的過程,因此稱為閉包
scala> val somenumbers = list(-11, -10, -5, 0, 5, 10)
somenumbers: list[int] = list(-11, -10, -5, 0, 5, 10)
scala> var sum = 0
sum: int = 0
scala> somenumbers.foreach(sum += _)
scala> sum
res8: int = -11
scala> somenumbers.foreach(sum += _)
scala> sum
res10: int = -22
//下列函式也是一種閉包,因為在執行時其值才得以確定
def multiplyby(factor:double)=(x:double)=>factor*x
函式第五節
coding utf 8 1.定義乙個func name 該函式效果如下。assert func lilei lilei assert func hanmeimei hanmeimei assert func hanmeimei hanmeimei def title name if isinsta...
第五節 Scala 基本運算
加法 scala varsum 1 2sum int 3 加法 第二個引數為long 返回值為long scala varsum 1 2lsum long 3 減法 scala 1 2res2 int 1 負數 操作 scala 1 1res3 int 0 乘法 scala 1 2res4 int ...
第五節 字典
字典的表現形式為大括號 dict key必須可hash,必須唯一且必須為不可改變的資料型別 value可存放任意多個值,可修改,可不唯一 無序且查詢速度快 鍵 值 鍵值對 1 dic.keys 返回乙個包含字典所有key的列表 2 dic.values 返回乙個包含字典所有value的列表 3 di...