高阶函数(Higher-Order Function)高阶函数可以使用其他函数作为参数,进入方法内使用,或者使用函数输出结果作为参数。
1.使用函数输出结果作为参数
object Demo {
def main(args: Array[String]): Unit = {
delayed(time()) //time()返回值为Long类型,或者此处出入一个Long类型的值(数值即可)
}
// 函数1,返回当前时间纳秒数,Long类型
def time() = {
println("获取时间,单位为纳秒")
System.nanoTime
}
// t: => Long 可以简写为t:Long, =>Long表示如果传入参数为方法时返回值为Long类型
def delayed( t: => Long ) = {
println("在 delayed 方法内")
println("参数: " + t)
t
}
}
2.使用其他函数作为参数,进入方法内使用
object Demo {
def main(args: Array[String]): Unit = {
println(apply(layout,1))
println(apply(layout,1))
}
// 函数 f 和 值 v 作为参数,而函数 f 又调用了参数 v
// f:Int => String,传入的方法参数,有一个Int类型的参数,并且返回值为String
// def apply(f: Int => String, v: Int) = f(v,2)
// A为泛型,在上面apply的参数f:Int,由Int类型声明
// def layout[A](x: A) = "[" + x.toString() + "]"
// f: (Int, String) 确定参数个数,并指定泛型类型,没有参数可以不写 => String,String为返回值类型
def apply(f: (Int, String) => String, v: Int) = f(v,"3")
// A,B为泛型,返回值为String类型
def layout[A,B](x: A,y:B) = "[" + x.toString() + y.toString() + "]"
}