1.函数的字面量语法
(1)另一种定义函数的方式
定义函数的方法一:def 定义函数的方式二:字面里 有一定的例子:
object base43 {
/*
* 函数字面量
* 另一种定义函数的方式
*/
// 定义函数的方式一: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))
}
}
这个例子的效果结果如图所示:
(2).Scala的函数字面量的简化方式有两种方式:
第一种方式为:(占位符).如果函数中的参数在方法体中只使用_替换。第二种方式为:只有一个表达式时,可以省略括号。
val sum1 = (x:Int, y:Int) =>{x+y}
val sum2 = (x:Int, y:Int) => x+y
val sum3:(Int, Int)=>Int = _ + _
val sum4 = (: Int) + (_: Int)
具体例子展示:
object base44 {
/*
* 函数字面量的简化写法
* 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))
}
}
运行结果如图所示:
3.当一个函数有多个参数,需要定义好函数
输入以下代码:
object base45 {
/*
把一个函数 当做参数 传递给另一个函数
*/
// 定义两个字面量函数。(Int, Int) => Int 看成一种数据类型
val f1: (Int, Int) => Int = _ + _
// val a:Int = 1
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 = {
// 明确输出test(f1, 10, 20)和f1(10, 20)的结果并比较
println(s"test(f1, 10, 20) = ${test(f1, 10, 20)}, f1(10, 20) = ${f1(10, 20)}, equals: ${test(f1, 10, 20) == f1(10, 20)}")
println(s"test(f2, 10, 20) = ${test(f2, 10, 20)}")
}
运行结果如图所示;