feat:ChatGPT第 6 课:占位符 _、参数类型推断、匿名函数简写。

This commit is contained in:
2026-09-13 22:49:11 +08:00
parent e481ad1424
commit a019745c81
7 changed files with 180 additions and 0 deletions
+62
View File
@@ -0,0 +1,62 @@
package practise6.demo
/*
第 6 课:占位符 _、参数类型推断、匿名函数简写。
*/
object Demo {
def main(args: Array[String]): Unit = {
/*
这一课的目标不是单纯记住 _,而是让你看到下面这些代码时,知道它们为什么等价:
(x: Int) => x * 2
↓
x => x * 2
↓
_ * 2
*/
println("====为什么等价====")
val test = (x: Int) => x * 2
val test2: Int => Int = x => x * 2
val test3: Int => Int = _ * 2
println(test(10))
println(test2(10))
println(test3(10))
// filter 也一样
println("====filter====")
val nums = List(1, 2, 3, 4, 5)
println(nums.filter(x => x >= 3))
println(nums.filter(_ >= 3))
// 链式调用
println("====链式调用====")
println(nums
.filter(x => x % 2 == 0)
.map(x => x * 10))
println(nums
.filter(_ % 2 == 0)
.map(_ * 10))
println("====一个 _ 对应一个参数====")
// 一个 _ 对应一个参数
val double: Int => Int = _ * 2 // 一个 `_` 对应 一个参数
// 第一个 _ → 第一个参数,第二个 _ → 第二个参数,相当于(a, b) => a + b
val add: (Int, Int) => Int = _ + _
val add2: (Int, Int) => Int = (a, b) => a + b
println(add(10, 20))
println(add2(10, 20))
println("====再看 String====")
//再看 String,_ 并不只适用于数字。
val names = List("Tom", "Jack", "Alice")
val resultName = names.map(x => x.toUpperCase)
val resultName2 = names.map(_.toUpperCase)
println(resultName)
println(resultName2)
val resultName3 = names.filter(x => x.length > 3)
val resultName4 = names.filter(_.length > 3)
println(resultName3)
println(resultName4)
}
}
@@ -0,0 +1,21 @@
package practise6.exercises
/*
练习 1
把:
val double = (x: Int) => x * 2
改成使用 _ 的写法。
要求仍然:
println(double(10))
输出:
20
*/
object Exercises1 {
def main(args: Array[String]): Unit = {
val double: Int => Int = _ * 2
println(double(10))
}
}
@@ -0,0 +1,21 @@
package practise6.exercises
/*
练习 2
把:
nums.map(x => x * 10)
改成 _。
给:
val nums = List(1, 2, 3, 4, 5)
结果:
List(10, 20, 30, 40, 50)
*/
object Exercises2 {
def main(args: Array[String]): Unit = {
val nums = List(1, 2, 3, 4, 5)
println(nums.map(_ * 10))
}
}
@@ -0,0 +1,15 @@
package practise6.exercises
/*
练习 3
把:
nums.filter(x => x % 2 == 0)
改成 _。
*/
object Exercises3 {
def main(args: Array[String]): Unit = {
val nums = List(1, 2, 3, 4, 5)
println(nums.filter(_ % 2 == 0))
}
}
@@ -0,0 +1,21 @@
package practise6.exercises
/*
练习 4
把:
val add: (Int, Int) => Int = (a, b) => a + b
改成 _。
要求:
println(add(10, 20))
输出:
30
*/
object Exercises4 {
def main(args: Array[String]): Unit = {
val add: (Int, Int) => Int = _ + _
println(add(10, 20))
}
}
@@ -0,0 +1,30 @@
package practise6.exercises
/*练习 5 ⭐
给:
val nums = List(1, 2, 3, 4, 5, 6, 7, 8, 9, 10)
只使用 _,完成:
1. 保留偶数
2. 每个偶数乘 10
3. 再加 1
最终:
List(21, 41, 61, 81, 101)
要求尝试写成:
nums
.filter(...)
.map(...)
.map(...)*/
object Exercises5 {
def main(args: Array[String]): Unit = {
val nums = List(1, 2, 3, 4, 5, 6, 7, 8, 9, 10)
val result = nums
.filter(_ % 2 == 0)
.map(_ * 10)
.map(_ + 1)
println(result)
}
}
@@ -0,0 +1,10 @@
package practise6.exercises
object Exercises6 {
def main(args: Array[String]): Unit = {
val add: (Int, Int) => Int = _ + _
val multiply: (Int, Int) => Int = _ * _
println(add(3, 4))
println(multiply(3, 4))
}
}