一、函数的定义:
def sum(num:Int):Int = {
num + 1
}
我们类比一下变量的定义,变量有类型和变量名。比如 var str:String = "func" ;
str为变量名,String为他的类型,"func"为他得值。类比到函数上就是这样:
sum为函数名,
Int => Int 就为函数的类型,
(num:Int) => {num + 1} 就是函数的值。有没有发现这其实是一个匿名函数? (注意这个值的前半部分要加括号括起来)
总感觉这样说不太生动,还是举例子吧:
val s = (num:Int) => num + 1
print(s(5))
因为Scala有类型自动推断,我们将函数的"值"赋给变量s 就会自动推断为一个类型为 Int => Int 的函数,我们可以通过调用它来证明这个结论。
二、高阶函数
有了上边的推断我们来看一下简单的高阶函数:
def aa(f:(Int,Int)=>Int,a:Int,b:Int):Int={
return f(a,b)
}
我们有这样一个函数,他的参数类型为((Int,Int)=>Int, Int, Int),返回值为Int,也就是说它的参数有三个,一个函数类型的参数,两个Int类型的参数。接下来我们要使用他,为了更好地说明函数的“值“这一概念,我们结合最开始定义的sum函数:
使用sum函数:
val num = 5
val i = sum(num)
val j = sum(5)
接下来我们再看aa函数的使用:
val i: Int = aa(fun,9,8)
val j: Int = aa((a:Int,b:Int) => {a+b},5,6)
fun函数:
def fun(a:Int, b: Int):Int={
return a+ b
}
aa的函数参数我们可以使用定义好的函数,也可以使用函数的“值”来使用,就和num 和 5一样一个是定义好的变量,一个是“值”。