一般写法
// 一般写法
def fun1(): (String) => String = {
// 内部函数
def f(s: String): String ={
s
}
// 函数作为返回值
f _
}
// 调用
val ff: String => String = fun1()
println(ff("hello"))
// 或者
println(fun1()("hi"))
闭包概念
内部函数访问外部函数的变量,当外部函数执行结束后,栈内存空间释放,但是会自动延长变量的生命周期,这时,外部变量和内部函数就形成了闭包。
闭包的使用
// 外部函数
def fun1(): (Int) => Int ={
// 外部函数变量
var a = 10
// 内部函数
def fun2(b: Int): Int = {
a + b
}
// 作为值返回
fun2 _
}
// 调用
println(fun1()(20))
// 闭包的简化
def f3(): (Int) => Int ={
var a = 10
(b: Int) => a + b
}
// 调用简化版闭包
// println(f3()(20))
柯里化的概念
将函数的一个参数列表中的多个参数,拆分为多个参数的形式。
柯里化的使用
// 柯里化
def fun1()(b: Int): Int = {
var a = 10
a + b
}
val res: Int = fun1()(20)
println(res)
// 柯里化运行时会转为如下效果
def fun1(): (Int) => Int = {
var a = 10
(b: Int) => a + b
}
柯里化的好处
- 每一个参数列表表示一个函数,清晰明确。
- 简化闭包代码的编写。