feat:线下课代码,Lambda与练习

This commit is contained in:
2026-09-13 16:09:54 +08:00
parent 4e35bc5ddc
commit d08ecade11
2 changed files with 73 additions and 0 deletions
+11
View File
@@ -0,0 +1,11 @@
package chapter2.demo3
object AddF {
def main(args: Array[String]): Unit = {
def add(a: (Int, Int) => Int): Int = {
a(10, 20)
}
println(add((x, y) => x + y))
}
}
@@ -0,0 +1,62 @@
package chapter2.demo3
object DemoLambda {
def main(args: Array[String]): Unit = {
def add(z: Int, y: Int): Int = {
return z + y
}
// 实现了add函数功能的匿名函数
val addLambda: (Int, Int) => Int = (x: Int, y: Int) => x + y
// lambda表达式的类型可以自动推断,所以addLambda1可以不定义类型(自动推断)
val addLambda1 = (x: Int, y: Int) => x + y
// 因为addLambda2的类型已经确定了,所以后面的参数的类型可以省略,以为从类型定义中可以明确了
val addLambda2: (Int, Int) => Int = (x, y) => x + y
// (Int, Int) => Int (类型) Int,String
println(addLambda(1, 2))
// 函数作为参数
def func(test: (Int, Int) => Int, a: Int, b: Int): Unit = {
println(s"传入了两个数:$a,$b,他们的作用后的结果是${test(a, b)}")
}
func(addLambda, 10, 20)
val minusLambda: (Int, Int) => Int = (x, y) => x - y
func(minusLambda, 10, 20)
// 一次性使用的匿名函数,那么不需要定义变量指向它
func((x: Int, y: Int) => x * y, 10, 20)
def f0(f1:String => Unit):Unit = {
f1("test")
}
f0((name:String)=> println(name))
// 这里的name我并不关心是什么类型,总之就是把他打印了,那么我们可以省略掉lambda表达式的参数类型的定义
// 实际上在f0的定义中,已经确定了lambda表达式的参数类型是什么
// val test:String => Unit = (name)=> println(name + "lambda表达式")
f0((name)=> println(name))
// lambda表达式只有一个参数,并且类型被省略了,那么括号也可以省略
f0(name => println(name))
// 这个name在后面的代码中只被使用了一次,那其实它叫什么名字都无所谓
// f0( _ => println( _ ))
// 参数和函数体中的引用,只有一次,那么参数也可以省略了
f0( println( _ ))
// 如果在f0的调用中,能确定println是一个函数体,而不是调用语句,那么 ( _ ) 可以省略
f0(println)
// 不能直接写f0(),因为我不知道你要做什么操作
// f0()
f0(println)
}
}