目录
使用 函数名 _ 或者 函数名(_) 即可,当可以自动推断出要做是将函数赋给一个函数类型而不是函数调用时,可以直接使用 函数名 省略掉其后的下划线
object Lambda {
def main(args: Array[String]): Unit = {
def func(a: Int, b: Int): Int = {
a + b
}
// 函数作为值进行传递
val f1: (Int, Int) => Int = func
val f2 = func _
println(f1(2, 3))
println(f2(3, 4))
}
}
测试
当作为需要作为参数传入的函数没有参数的情况
此时下划线不能被省略,因为无参的函数可以被 函数名 直接调用 ,不加下划线就会被视为调用
object Lambda {
def main(args: Array[String]): Unit = {
def func: Int = {
3
}
// 函数作为值进行传递
val f1: () => Int = func _
val f2 = func _
println(f1)
println(f2)
}
}
可见这里的 f1 f2 都已经是函数了
将函数作为返回值返回
object Lambda {
def main(args: Array[String]): Unit = {
//函数作为函数的返回值返回
def f5(): Int => Unit = {
def f6(a: Int): Unit = {
println("f6调用" + a)
}
f6
}
//f5调用得到的返回值是函数f6,对返回值进行调用,等同于调用f6
println(f5())
println(f5()(25))
}
}
测试