1. 函数字面量;
2. 部分应用函数。
(一)函数的字面量语法
除了使用def之外的,另一种定义函数的方式
语法:var 变量 = (参数列表)=>{方法体}
它省略了def,函数名以及函数的返回值类型。
【编码示范】
less
体验AI代码助手
代码解读
复制代码
object base42 {
/*
*函数自变量
*另一种定义函数的方式
* */
// 定义函数的方式一:def
def getSum(x:Int,y:Int):Int = {
x+y
}
// 定义函数的方式二:自变量
val getSum1 = (x:Int,y:Int) => {
x+y
}
def main(args:Array[String]):Unit={
println(getSum(10,20))
println(getSum1(10,20))
}
}
【简化写法】
kotlin
体验AI代码助手
代码解读
复制代码
object base43 {
/*
*函数字面量的简化写法有两种
*1.代码只有一句, 省略{ }
* 2. _占位符来替换形参
* */
//
val getSum = (x:Int,y:Int) => {
x+y
}
// 省略{}
val getSum1 = (x:Int,y:Int) => x+y
// 使用 _ 来替代形参
val getSum2 = (_:Int) + (_:Int)
// 使用 _ 来代替形参,(Int,Int)=>Int就是getSum3的类型!
val getSum3:(Int,Int)=>Int = _ + _
def main(args:Array[String]):Unit={
println(getSum(10,20))
println(getSum1(10,20))
println(getSum2(10,20))
println(getSum3(10,20))
}
}
(二)把函数作为参数
某个函数的参数是函数
定义一个接收函数作为参数的函数def a(f:()=>Unit)={},其中函数的类型()=>Unit部分()为函数的参数,Unit为函数的返回值。通过定义字面量传递值时,字面量必须和函数的类型匹配。
【编码示范】
kotlin
体验AI代码助手
代码解读
复制代码
object base44 {
/*
*把一个函数当做参数 传递给另一个函数
* */
// 定义两个字面量函数。 (Int,Int) => Int 看成一种数据类型
val f1:(Int,Int)=>Int = _ + _
// val a:Int
val f2:(Int,Int)=>Int = _ * _
//定义一个函数,它有三个参数
//参数1:类型是 (Int,Int) => Int 。它表示这里需要一个函数
def test(fn: (Int,Int) => Int, x:Int, y:Int): Int ={
fn(x,y)
}
def main(args:Array[String]):Unit={
println(test(f1,10,20))
println(test(f2,10,20))
}
}
(三)把函数作为返回值
函数的返回值是一个函数。
【编码示范】
scss
体验AI代码助手
代码解读
复制代码
def main(args: Array[String]): Unit = {
// 函数f 的返回值就是一个函数
var f = (x:Int) => {
// println(x)
// var f1 = (y:Int) => x + y
// f1 // 返回值是一个函数
(y:Int) => x + y
}
var s = f(2) // s 是一个函数
var res = s(10)
println(res)
}
(四)Scala部分应用函数
如果一个函数包含多个参数,对该函数传递部分参数使得这个函数返回一个函数,那么这种函数叫做部分应用函数。
scss
体验AI代码助手
代码解读
复制代码
object base45 {
/*
*部分应用函数
*如果一个函数需要3个参数,而我们只给了2个参数,会怎么样?
* */
def getSum(a:Int, b:Int, c:Int):Int = {
a + b + c
}
def main(args:Array[String]):Unit={
println(getSum(10,20,30))
val t = getSum(10,20,_) // t 就是部分应用函数!
val t1 = getSum(_,20,_) // t 就是部分应用函数!
println(t(50))
println(t1(20,50))
}
}