Scala编程语言实例指南

5星 · 超过95%的资源 需积分: 9 4 下载量 185 浏览量 更新于2024-07-31 收藏 866KB PDF 举报
"Scala By Example 是一份由Scala语言发明者Martin Odersky编写的文档,提供了大量的示例代码来展示Scala编程语言的用法。该文档涵盖了从基础到高级的各种主题,包括表达式、函数、类与对象、模式匹配、泛型以及列表等核心概念。" 在这份文档中,读者可以学习到以下关键知识点: 1. **表达式和简单函数**(Expressions and Simple Functions): - Scala中的代码主要由表达式构成,这使得语言更加简洁且富有表达力。 - 参数(Parameters):Scala支持位置参数和命名参数,使函数调用更加灵活。 - 条件表达式(Conditional Expressions):使用`if-else`语句进行条件判断。 - 牛顿法求平方根(Example: Square Roots by Newton's Method):通过递归或尾递归实现算法。 - 内嵌函数(Nested Functions):函数可以定义在其他函数内部,用于封装局部逻辑。 - 尾递归(Tail Recursion):优化递归函数,使其在尾部调用自身,提高效率。 2. **第一类函数(First-Class Functions)**: - 匿名函数(Anonymous Functions):可以作为值、参数或返回结果。 - 偏函数(Currying):将多参数函数转换为一系列单参数函数的过程。 - 找到函数的不动点(Example: Finding Fixed Points of Functions):使用高阶函数来寻找函数的特定解。 - 总结(Summary):这部分总结了关于函数的要点。 - 到目前为止的语言元素(Language Elements Seen So Far):回顾已讨论过的编程特性。 3. **类与对象(Classes and Objects)**: - Scala是面向对象的语言,一切皆为对象。 4. **模式匹配与案例类(Case Classes and Pattern Matching)**: - 案例类(Case Classes and Case Objects)提供了一种创建具有解构功能的数据结构的方式。 - 模式匹配(Pattern Matching):用于从复杂数据结构中提取信息。 5. **泛型类型与方法(Generic Types and Methods)**: - 类型参数约束(Type Parameter Bounds):定义泛型类型的限制,如`<:`, `>:`, `>:<:`等。 - 变异性注解(Variance Annotations):`+`和`-`用来控制协变和逆变。 - 下界(Lower Bounds):确保类型参数的最小限制。 - 最小类型(Least Types):用于表示类型之间的共性。 - 元组(Tuples):组合不同类型的值。 - 函数(Functions):作为值的函数可以有泛型类型。 6. **列表(Lists)**: - 使用列表(Using Lists):了解如何创建和操作列表。 - 列表定义I:一阶方法(Definition of class List I: First-Order Methods):包含基本的列表操作。 - 归并排序(Example: Mergesort):使用列表实现高效的排序算法。 - 列表定义II:高阶方法(Definition of class List II: Higher-Order Methods):利用高阶函数处理列表。 通过这份文档,读者将能够深入理解Scala语言的精髓,并具备编写高效、简洁的Scala代码的能力。
2014-05-14 上传
1 Introduction 1 2 A First Example 3 3 Programming with Actors and Messages 7 4 Expressions and Simple Functions 11 4.1 Expressions And Simple Functions . . . . . . . . . . . . . . . . . . . . . . 11 4.2 Parameters . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12 4.3 Conditional Expressions . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15 4.4 Example: Square Roots by Newton’s Method . . . . . . . . . . . . . . . . 15 4.5 Nested Functions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16 4.6 Tail Recursion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18 5 First-Class Functions 21 5.1 Anonymous Functions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22 5.2 Currying . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23 5.3 Example: Finding Fixed Points of Functions . . . . . . . . . . . . . . . . 25 5.4 Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27 5.5 Language Elements Seen So Far . . . . . . . . . . . . . . . . . . . . . . . 28 6 Classes and Objects 31 7 Case Classes and Pattern Matching 43 7.1 Case Classes and Case Objects . . . . . . . . . . . . . . . . . . . . . . . . 46 7.2 Pattern Matching . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 47 8 Generic Types and Methods 51 8.1 Type Parameter Bounds . . . . . . . . . . . . . . . . . . . . . . . . . . . . 53 8.2 Variance Annotations . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 56iv CONTENTS 8.3 Lower Bounds . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 58 8.4 Least Types . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 58 8.5 Tuples . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 60 8.6 Functions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 61 9 Lists 63 9.1 Using Lists . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 63 9.2 Definition of class List I: First Order Methods . . . . . . . . . . . . . . . 65 9.3 Example: Merge sort . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 68 9.4 Definition of class List II: Higher-Order Methods . . . . . . . . . . . . . 70 9.5 Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 77 10 For-Comprehensions 79 10.1 The N-Queens Problem . . . . . . . . . . . . . . . . . . . . . . . . . . . . 80 10.2 Querying with For-Comprehensions . . . . . . . . . . . . . . . . . . . . . 81 10.3 Translation of For-Comprehensions . . . . . . . . . . . . . . . . . . . . . 82 10.4 For-Loops . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 84 10.5 Generalizing For . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 84 11 Mutable State 87 11.1 Stateful Objects . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 87 11.2 Imperative Control Structures . . . . . . . . . . . . . . . . . . . . . . . . . 91 11.3 Extended Example: Discrete Event Simulation . . . . . . . . . . . . . . . 92 11.4 Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 97 12 Computing with Streams 99 13 Iterators 103 13.1 Iterator Methods . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 103 13.2 Constructing Iterators . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 106 13.3 Using Iterators . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 107