feat:线下课代码,Lambda与练习
This commit is contained in:
@@ -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)
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user