feat:ChatGPT第 6 课:占位符 _、参数类型推断、匿名函数简写。
This commit is contained in:
@@ -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))
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user