1、匿名函数
定义方法:
var 函数名 = (参数列表) => 函数的实现代码
下面的代码实现了 匿名函数、不带参数的匿名函数:
object Test {
def main(args: Array[String]) {
//嵌入在main函数中的 函数
//f_inc函数式
def f_inc = new Function2[Int, Int, Int] {
def apply(x:Int,y: Int):Int = x + y + 1;
}
println(f_inc(1,2))
//匿名函数 是上面f_inc函数写法的简化版
var inc = (x:Int) => x + 1
println(inc(1))
//不带参数的匿名函数
var userDir = () => {System.getProperty("user.dir")}
println( userDir() )
}
}
第1个定义的函数f_inc是 匿名函数inc的原始实现方式,其中 Function2 中的2表示有2个参数,第3个Int表示返回值。
2、高阶函数
所谓高阶函数,就是可以操作其他函数的函数,这里的操作 是指 可以把函数作为参数,也可以作为 输出结果。
下面代码中 apply就是高阶函数,参数中的f 其实是一个函数,因为f的参数类型是 Int=>String ,另一个参数v之后作为f的参数,
另外,func函数右侧的[T] 表示函数的输入参数类型是 泛型,也就是参数类型是可以变化的,关键看调用时指定的类型,这里apply在定义时指定 参数v为Int类型,所以 对应到func函数中的T 就是 Int 类型:
object Test {
def main(args: Array[String]) {
println( apply(func, 10) )
}
//高阶函数
def apply( f: Int => String, v: Int) = f(v)
def func[T](x: T) = "[" + x.toString + "]"
}
输出:
C:\Users\Administrator\Desktop>scala Test.scala
[10]
3、嵌套函数
嵌套函数就是 定义在函数中的 函数。
object Test {
def main(args: Array[String]) {
println( factorial(3) )
}
//求阶乘
def factorial(i : Int): Int = {
//包含在函数 factorial中的 函数
def fact(i: Int, acc: Int): Int = {
if(i<=1)
acc //fact函数的返回值
else
fact(i-1, i * acc) // i-1表示开始计算下一次阶乘
}
fact(i, 1) //计算i的阶乘
}
}
输出:
C:\Users\Administrator\Desktop>scala Test.scala
6