From 22892f7f50437c48c160c4ff13f7d3e091af2a92 Mon Sep 17 00:00:00 2001 From: kennethcheng Date: Sun, 13 Sep 2026 19:24:24 +0800 Subject: [PATCH] =?UTF-8?q?feat:ChatGPT=E7=AC=AC=205=20=E8=AF=BE=EF=BC=9A?= =?UTF-8?q?=E5=87=BD=E6=95=B0=E4=BD=9C=E4=B8=BA=E5=8F=82=E6=95=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/scala/practise5/demo/Demo.scala | 21 +++++++++++ .../practise5/exercises/Exercises1.scala | 29 +++++++++++++++ .../practise5/exercises/Exercises2.scala | 34 ++++++++++++++++++ .../practise5/exercises/Exercises3.scala | 29 +++++++++++++++ .../practise5/exercises/Exercises4.scala | 35 ++++++++++++++++++ .../practise5/exercises/Exercises5.scala | 36 +++++++++++++++++++ 6 files changed, 184 insertions(+) create mode 100644 src/main/scala/practise5/demo/Demo.scala create mode 100644 src/main/scala/practise5/exercises/Exercises1.scala create mode 100644 src/main/scala/practise5/exercises/Exercises2.scala create mode 100644 src/main/scala/practise5/exercises/Exercises3.scala create mode 100644 src/main/scala/practise5/exercises/Exercises4.scala create mode 100644 src/main/scala/practise5/exercises/Exercises5.scala diff --git a/src/main/scala/practise5/demo/Demo.scala b/src/main/scala/practise5/demo/Demo.scala new file mode 100644 index 0000000..a296076 --- /dev/null +++ b/src/main/scala/practise5/demo/Demo.scala @@ -0,0 +1,21 @@ +package practise5.demo +/* +doSomething +↓ +需要一个函数 +↓ +x => x * 2 +↓ +把这个函数交给 doSomething + +这就是: +函数作为参数传递。 +*/ +object Demo { + def main(args: Array[String]): Unit = { + doSomething(x => x * 2) + } + private def doSomething(f: Int => Int): Unit = { + println(f(10)) + } +} diff --git a/src/main/scala/practise5/exercises/Exercises1.scala b/src/main/scala/practise5/exercises/Exercises1.scala new file mode 100644 index 0000000..3b2fe2b --- /dev/null +++ b/src/main/scala/practise5/exercises/Exercises1.scala @@ -0,0 +1,29 @@ +package practise5.exercises + +/* +练习 1 + +定义: +def operate(a: Int, b: Int, f: (Int, Int) => Int): Int = { + // ... +} + +要求让它能够这样使用: +println(operate(10, 20, (a, b) => a + b)) + +输出: +30 + +提示: +函数参数 f 可以这样调用: + +f(a, b)*/ +object Exercises1 { + def main(args: Array[String]): Unit = { + println(operate(10, 20, (a, b) => a + b)) + } + + def operate(a: Int, b: Int, f: (Int, Int) => Int): Int = { + f(a, b) + } +} diff --git a/src/main/scala/practise5/exercises/Exercises2.scala b/src/main/scala/practise5/exercises/Exercises2.scala new file mode 100644 index 0000000..a1a7459 --- /dev/null +++ b/src/main/scala/practise5/exercises/Exercises2.scala @@ -0,0 +1,34 @@ +package practise5.exercises + +/* +让下面这些都能正常工作: +println(operate(10, 20, (a, b) => a + b)) +println(operate(10, 20, (a, b) => a - b)) +println(operate(10, 20, (a, b) => a * b)) + +输出: +30 +-10 +200 + +注意: +operate 自己并不知道你要做加法、减法还是乘法。 + +它只负责: +接收两个数字 ++ + 接收一个函数 ++ + 执行这个函数 +*/ +object Exercises2 { + def main(args: Array[String]): Unit = { + println(operate(10, 20, (a, b) => a + b)) + println(operate(10, 20, (a, b) => a - b)) + println(operate(10, 20, (a, b) => a * b)) + } + + def operate(a: Int, b: Int, f1: (Int, Int) => Int): Int = { + f1(a, b) + } +} diff --git a/src/main/scala/practise5/exercises/Exercises3.scala b/src/main/scala/practise5/exercises/Exercises3.scala new file mode 100644 index 0000000..d9399f4 --- /dev/null +++ b/src/main/scala/practise5/exercises/Exercises3.scala @@ -0,0 +1,29 @@ +package practise5.exercises + +/* +练习 3 + +自己定义: +def calculate(a: Int, f: Int => Int): Int + +要求: +println(calculate(10, x => x * 2)) + +输出: +20 + +以及: +println(calculate(10, x => x * 3)) + +输出: +30 +*/ +object Exercises3 { + def main(args: Array[String]): Unit = { + println(calculate(10, x => x * 2)) + println(calculate(10, x => x * 3)) + } + private def calculate(a: Int, f: Int => Int): Int = { + f(a) + } +} diff --git a/src/main/scala/practise5/exercises/Exercises4.scala b/src/main/scala/practise5/exercises/Exercises4.scala new file mode 100644 index 0000000..2093df8 --- /dev/null +++ b/src/main/scala/practise5/exercises/Exercises4.scala @@ -0,0 +1,35 @@ +package practise5.exercises + +/* +练习 4 + +给: +val nums = List(1, 2, 3, 4, 5) + +先自己定义一个函数: +val double = (x: Int) => x * 2 + +然后不要直接写: +nums.map(x => x * 2) + +而是: +nums.map(double) + +观察结果。 + +也就是说: +x => x * 2 + +和: +double + +都可以作为 map 的参数。 +*/ +object Exercises4 { + def main(args: Array[String]): Unit = { + val nums = List(1, 2, 3, 4, 5) + val double = (x: Int) => x * 2 + println(nums.map(double)) + println(nums.map(x => x * 2)) + } +} diff --git a/src/main/scala/practise5/exercises/Exercises5.scala b/src/main/scala/practise5/exercises/Exercises5.scala new file mode 100644 index 0000000..2283137 --- /dev/null +++ b/src/main/scala/practise5/exercises/Exercises5.scala @@ -0,0 +1,36 @@ +package practise5.exercises + +/* +练习 5 ⭐⭐⭐ + +最后做一道非常接近真实 Scala/Spark 的: +val nums = List(1, 2, 3, 4, 5, 6, 7, 8, 9, 10) + +完成: +1. 过滤出偶数 + 2. 每个偶数乘 10 +3. 最终得到 List(20, 40, 60, 80, 100) + +要求使用: +filter +map + +并且尽量使用函数值变量,例如: +val isEven = ... +val multiply10 = ... + +最终类似: +nums + .filter(isEven) + .map(multiply10) +*/ + +object Exercises5 { + def main(args: Array[String]): Unit = { + val nums = List(1, 2, 3, 4, 5, 6, 7, 8, 9, 10) + val isEven = (x:Int) => x%2==0 + val multiply10 = (x:Int) => x * 10 + val result = nums.filter(isEven).map(multiply10) + println(result) + } +}