函数的字面量语法
除了使用def之外的,另一种定义函数的方式
语法:var 变量 = (参数列表)=>{方法体}
它省略了def,函数名以及函数的返回值类型。
/*
* 函数字面量
* 另一种定义函数的方式
* */
//定义函数的方式一: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))
}
把函数作为参数
某个函数的参数是函数
/*
* 函数字面量的简化写法
* 代码只写一句,省略{}
* _占位符来替代形参
* */
//定义函数的方式二:字面量
val getSum = (x:Int,y:Int) => {
x + y
}
//省略{}
val getSum1 = (x:Int,y:Int) => x + y
//使用_来替代形参
val getSum2 = (_:Int) + (_:Int)
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))
}
}
把函数作为返回值
函数的返回值是一个函数。
/*
* 把一个函数 当做参数 传递给另一个函数
*
* */
//定义两字面量函数.(Int,Int)=>Int 看出一种数据类型
val f1:(Int,Int)=> Int = _ + _
//val a:Int
val f2: (Int,Int) => 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))
}
代码如下:
/*
* 部分应用函数
* 如果一个函数需要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) )
}
代码如下:
/*
* 高阶: 一种特殊的函数,它的参数或者返回值是函数类型
* map函数
*
*/
def main(args: Array[String]): Unit = {
val arr1 = Array(1,2,3,4,5,6)
//Array是一个构造器,用它来定义一个数组
//arr1就是一个数组对象,它有很多的方法,其中就有map
//for 循环来输出数组中每个元素
val fn = (x:Int) => x * 2
//fn是一个函数,它被传给了map。map是一个高阶函数
val arr2 = arr1.map(x => x * 2 )
//for 循环来输出数组中每个元素
for(i <- arr2){
println(i)
}
}
*/
def main(args: Array[String]): Unit = {
val arr1 = Array(1, 2, 3, 4, 5)
val arr2 = arr1.map(x => x * x)
for (i <- arr2) {
print(s"${i} ")
}
val arr3 = Array(-1, 2, -3, -4)
//绝对值
val arr4 = arr3.map(x => if (x > 0) x else -x)
println()
for (i <- arr4) {
print(s"${i} ")
}
}
/**
* foreach的练习题
* 是数组的每一个元素都执行一次函数
*
*/
def main(args: Array[String]): Unit = {
val arr1 = Array(1, 2, 3, 4, 5)
// arr1.foreach(x => println(x))
arr1.foreach(print)
arr1.foreach(println())
}
}
}