说明
传统方式传参有以下2种:
基本数据类型 或 字符串,如:数字
1,或 字符串"hello"作为参数,传递给一个方法引用类型,如:将
student对象,作为参数,传递给一个方法
此处与传统方式不同,是将 函数作为参数,传递给另一个函数
应用场景
数组、集合 的 foreach() 方法
数组的元素已经确定,即:数据是确定的,对数据的处理不确定,对外(其他程序员)提供一个入口,可以自定义对数据处理
好处:简化开发,只需要定义对数据的处理函数即可
例子1(可略)
- 定义一个函数
add(),有1个形参 - 定义一个函数
test(),有1个形参,但该形参的类型是 函数 - 然后将该
add()函数作为参数,传递给函数test()
定义函数 add()
def add(a:Int) : Int = {
return a+2
}
定义函数 test()
def test(fun:(Int) => Int):Int = {
return fun(1)
}
调用
println(test(add))
例子2
- 定义一个函数
add(),有2个形参 - 定义一个函数
test(),有1个形参,该形参的类型是 函数类型 - 然后将该
add()函数作为参数,传递给函数test()
def main(args: Array[String]): Unit = {
//定义函数
def add(a:Int,b:Int) : Int = {
return a+b
}
//定义test()函数,其形参的类型是函数类型
def test(fun:(Int,Int) => Int):Int = {
return fun(1,3)
}
//将 add() 函数作为参数,传递给test()函数
println(test(add))
}
执行过程如下图:
例子2 的缺点
在 test() 函数中,调用 fun(1,3),传递 1 和 3 ,写死了,这是不合理的
例子3-解决例子2的缺点
为了解决 例子2的缺点,改造如下:
- 给
test()函数,增加2个Int型形参 - 在
test()函数内,调用fun()函数时,将这个参数 传递 给fun()函数
def main(args: Array[String]): Unit = {
//定义函数
def add(a:Int,b:Int) : Int = {
return a+b
}
/*
* 定义test()函数,
* 第一个形参的类型是函数类型
* 第2、3个形参的类型是Int类型
*/
def test(fun:(Int,Int) => Int,a:Int,b:Int):Int = {
return fun(a,b)
}
println(test(add,100,200))
}
执行过程如下:

