偏函式:
val list =(1
,2,3
,4,"zhc"
)val addone =
newpartialfunction
[any,int]
val list1 = list.
collect
(addone)
println
(list1)
簡化形式1:
def fun:partialfunction[any,int]
=val list =
list(1
,2,3
,4,"zhy").
collect
(fun)
簡化形式2:
val list =
list(1
,2,3
,4,"zhy"
).collect
作為引數的函式def plus
(i: int)
= i +
1val arr =
array(1
,2,3
).map(
plus
(_))
println
(arr.
mkstring
(","
))
匿名函式val a =
(x: double)
=>
2* x
println(a
(2.1
))
示例2:
val fun =
(a: int,b: int)
=>
println
("fun型別是"
+fun)
//fun型別是
println
(fun(1
,2))
高階函式def test
(f:double =
> double,n: double)
=def sum
(d: double)
:double =
val res =
test
(sum,
6.66
)println
(res)
def fun
(a: int)
=val res =
fun(1)
(2)println
(res)
引數(型別)推斷
示例:
val list =
list(1
,2,3
,4)list.
map(
(a: int)
=> a +1)
list.
map(a =
> a +1)
list.
map(_ +1)
list.
reduce
(_ + _)
// 輸出10
閉包
示例:
def fun
(a :int)
=(b: int)
=> a - b
val f =
fun(20)
//f就是閉包函式
println(f
(1)+
","+f(
2))//輸出:19,18
函式柯里化def fun
(a: int,b: int)
= a - b//常規方法
println
(fun(2
,1))
def fun1
(a: int)
=(b: int)
=> a - b//閉包
println
(fun1(2
)(1)
)def fun2
(a: int)
(b: int)
= a - b//函式柯里化
println
(fun2(2
)(1)
)//比較兩個字串在忽略大小寫的情況下是否相等
def fun3
(s1: string)
(s2: string)
:boolean = s1.tolowercase == s2.tolowercase
抽象控制def fun
(f:()=
> unit)=}
.start()
}fun
遞迴相關
scala中迴圈不建議使用while和do…while,而建議使用遞迴。
//求最大值
def getmax
(list list[int]
)
//翻轉字串
def reverse
(s: string)
:string =
//求階層
def factorial
(n: int)
: long=
scala 函式總結
字面量 字面量 直接在源 裡書寫的 值 例如 變數scala宣告乙個變數的基本語法 val 變數名 變數型別 初始值 var 變數名 變數型別 初始值 初始值可以是字面量或變數名 scala中,函式成為了和普通的變數一樣的 頭等公民 可以像其他任何資料型別的值一樣的被傳遞和操作。函式的值也叫做函式的...
Scala程式設計11 高階函式 重點掌握
高階函式,即定義時將引數型別設定為函式,並在定義的地方進行呼叫,在使用時再將需要的函式體直接寫入或通過變數方式傳入進去 第一種 外面定義乙個函式,在使用時直接呼叫指向函式體的變數來呼叫此函式,使用起來和普通函式沒太多差別,直接傳值 如 交換兩個數 先定義乙個普通函式,實現兩個數的交換 def swa...
scala學習筆記 理解函式
定義乙個函式 scala def foo x int x 2 foo x int int可以採用匿名引數 scala def foo int int 2 foo int int這個函式的型別是int int scala var bar foo bar int int scala var bar in...