1:在Scala中“_”代表的意义
1)在元组中用来取值
var t=(1,2,3,4,"zz") println(t._5)
2)在匿名函数中指传递的是一个确切的函数
println("简写匿名:"+fun3((_ +1)))
3)表示每一个值
arr9=arr7.filter(_%2==0).map{_*3}
2:高阶函数
1) 定义一个基础的函数,带返回值的(Scala中返回值是用=表示)
def add(a:Int,b:Int)={
a+b
}
println(add(3,4))
把一个函数作为传递给另一个函数
例如:把add函数传递给声明的fun,传递方式是:函数名+空格+下划线
var fun=add _
println(fun+":"+fun(5,6))
2) 匿名函数
var funn=(x:Int)=>{x+2}
println(funn(3))
(x:Int):是匿名函数的条件
{x+2} :是匿名函数的实现(方法体)
上面的匿名方法就是:传递一个Int类型的参数,然后这个参数+2在返回
println(funn(3)):所以这个执行完是5
3)把一个函数作为另一个函数的参数传递
比如这个函数接收一个函数,(一个参数是一个Int类型,方法实现返回的也是一 个Int类型的函数)
def fun3(f:(Int)=>(Int))={
f(1)
}
这样就可以吧上面的funn匿名方法传递到fun3里面啦
println(fun3(funn))
因为funn的函数的实现是参数值+2 所以这个返回值是3
也可以直接给fun3直接传递一个匿名函数
println(fun3((x:Int)=>{x+1}))
并且这个方式可以简写为如下
println("简写匿名:"+fun3((_ +1)))
当然这样的简写是有条件的:
1.只有一个形参
2.匿名函数作为参数
3.函数体只有一行代码
下面一个比较繁琐一点的例子:
//传递给另外一个函数的营运场景
def CPU(a:Int)={
a+1
}
def GPU(a:Int)={
a+2
}
def comp(men:Int,cpu:(Int)=>(Int),gpu:(Int)=>(Int))={
men+cpu(1)+gpu(2)
}
var c=comp(3, CPU, GPU)
println(c) 返回值是9
所有代码:
object scalagaojie extends App {
//定义一个有返回值的函数
def add(a:Int,b:Int)={
a+b
}
println(add(3,4))
//把一个函数传递给另外一个函数(变量)
var fun=add _
println(fun+":"+fun(5,6))
//匿名函数
var funn=(x:Int)=>{x+2}
println(funn(3))
//传递函数作为两一个函数的参数类型 (传递的是条件是int,返回值是int的函数)
def fun3(f:(Int)=>(Int))={
f(1)
}
//直接吧funn函数传递进去
println(fun3(funn))
//也可以直接传递一个匿名的实现
println(fun3((x:Int)=>{x+x}))
//匿名方式简写
println("简写匿名:"+fun3((_ +1)))
//传递给另外一个函数的营运场景
def CPU(a:Int)={
a+1
}
def GPU(a:Int)={
a+2
}
def comp(men:Int,cpu:(Int)=>(Int),gpu:(Int)=>(Int))={
men+cpu(1)+gpu(2)
}
var c=comp(3, CPU, GPU)
println(c)
}
这是上面代码的执行结果
![](https://img-blog.csdnimg.cn/2022010702432039493.png)