package com.scala.A
/**
* 函数作为值、参数、返回值传递
* */
object scala_function_01 {
def main(args: Array[String]): Unit = {
def f(x: Int): Int = { //有参数,有返回值
println("f1被调用")
x + 1
}
//----------------------------------------------------------------------------------------------------------------------
println(f(2))
val result: Int = f(1)
println(result)
println("===========================")
//----------------------------------------------------------------------------------------------------------------------
//1.函数作为值被调用(两种写法)
val f1 = f _ //加一个下划线,表示函数整体
val f2: Int => Int = f //不加下划线,完整写出参数类型和返回值类型
//返回的是函数的映射地址
println(f1)
//返回的是函数的计算结果
println(f1(1))
println("---------------")
println(f2)
println(f1(2))
println("===========================")
def f_01(): Int = { //无参数,有返回值
println("F被调用")
1
}
println("++++++++++++++++++++++++++++++\n++++++++++++++++++++++++++++++")
//两种写法都表示调用f_01函数,因为函数没有参数,但是声明了参数列表,所有调用的时候小括号可家可不加
f_01() //函数被调用,输出的就是函数执行结果
f_01
val f3 = f_01 _ //加一个下划线,表示调用函数整体
println(f3) //返回的是函数的映射地址
//如果不加下划线,就可以完整的写出参数列表以及返回值类型,后面就可以不用加下划线,因为已经知道了这是一个参数和返回值类型确定的函数
val f4: () => Int = f_01
println(f4) //返回的是函数的映射地址
println("**************************************************************")
//----------------------------------------------------------------------------------------------------------------------
//2.函数作为参数进行传递
def dualEval(op: (Int, Int) => Int, a: Int, b: Int): Int = {
op(a, b)
}
def op_1(x: Int, y: Int): Int = {
x + y
}
val result1 = dualEval(op_1, 1, 2)
println(result1)
println(dualEval(op_1, 2, 2)) //普通函数
println(dualEval((x, y) => x + y, 2, 2)) //匿名函数
println(dualEval(_ + _, 2, 2)) //简化匿名函数
println("**************************************************************")
//----------------------------------------------------------------------------------------------------------------------
//3.函数可以作为函数的返回值返回
def f_02(): Int => Unit = { //没有参数,返回值类型为Int:Unit
def f_03(x: Int): Unit = {
println("f_03被调用:" + x)
}
f_03 //将函数直接返回
}
println(f_02()) //返回函数的地址
println(f_02()(25))
println("################################")
//----------------------------------------------------------------------------------------------------------------------
//3.1 函数可以作为函数的返回值返回
def f_04(): (Int, Int) => Int = {
def f_05(x: Int, y: Int): Int = {
x + y
}
f_05 //可以省略 : (Int, Int) => Int ,就换成 f_05 _
}
println(f_04()(50,50))
println(f_04())
}
}
Scala-函数作为值、参数、返回值传递
最新推荐文章于 2023-02-06 14:35:24 发布