Scala里面定义一个函数:
def max(x: Int, y: Int): Int = {
if (x > y)
return x
else
return y
}
定义一个max函数,处理两个变量,Int类型的x,Int类型的y,返回一个Int类型的值,如果返回空值的话返回类型是Unit
当然为了语法的简洁,Scala可以自动推测return语句,我们的程序完全可以写成这样
def max(x: Int, y: Int): Int = {
if (x > y) x
else y
}
//像变量一样,也可以自动推测返回类型,所以函数可以写成
def max(x: Int, y: Int) = {
if (x > y) x
else y
}
事实上Scala根本就不推荐写return...
其实如果仔细的看Scala定义函数的形式,会发现在Scala中定义函数的形式和定义一个变量是一样的
val max:Int = 1; //变量
def max(x: Int, y: Int): Int = { } // 函数
由于Scala的语法非常的灵活,在使用的时候,完全可以认为函数也是一种特殊的变量,和变量一样使用。
比如定义一个函数,我们可以像变量一样定义一个函数,并且使用它
val plus=(x:Int,y:Int)=>x+y
println(plus(3, 4))
//输出结果7
这其实就涉及到函数式编程的一个概念:函数是一等的值。
函数值的地位和整数、字符串是完全相同的,比如说我们就可以构造一个函数,它可以接受一个是函数的参数,在这个函数里我们可以直接使用这个函数。
比如把函数当成参数传进去:
//定义一个compare函数,接受x,y和一个函数func
def compare(x: Int, y: Int, func:(Int, Int)=>Int)={
func(x,y)
}
//当我们想求最大值的时候
compare(x,y,max)
//当我们求最小值的时候,可以这样写
compare(x,y,min)
类似于策略模式,通过我们传进去的函数来改变compare函数的行为。