第 1 章 基础 A1 1
1.1 Scala 解释器 1
1.2 声明值和变量 3
1.3 常用类型 4
1.4 算术和运算符重载 5
1.5 关于调用方法的更多内容 6
1.6 apply 方法 7
1.7 Scaladoc 8
练习 11
第 2 章 控制结构和函数 A1 12
2.1 条件表达式 12
2.2 语句终止 14
2.3 块表达式和赋值 15
2.4 输入和输出 16
2.5 循环 17
2.6 关于 for 循环的更多内容 19
2.7 函数 20
2.8 默认参数和命名参数 L1 21
2.9 可变参数 L1 22
2.10 主函数 23
2.11 无参函数 23
2.12 惰性求值 L1 24
2.13 异常 25
练习 27
第 3 章 数组操作 A1 29
3.1 定长数组 29
3.2 变长数组:数组缓冲区 30
3.3 遍历数组和数组缓冲区 31
3.4 转换数组 31
3.5 常用算法 33
3.6 解读 Scaladoc 34
3.7 多维数组 35
3.8 与 Java 的互操作 35
练习 36
第 4 章 映射、Option 和元组 A1 38
4.1 构造映射 38
4.2 访问映射值 39
4.3 更新映射值 39
4.4 遍历映射 40
4.5 链接和排序映射 41
4.6 与 Java 的互操作 41
4.7 Option 类型 42
4.8 元组 43
4.9 拉链操作 44
练习 44
第 5 章 类 A1 46
5.1 简单类和无参方法 46
5.2 带 getter 和 setter 的属性 47
5.3 仅带 getter 的属性 49
5.4 私有字段 50
5.5 辅助构造函数 51
5.6 主构造函数 52
5.7 嵌套类 L1 54
练习 55
第 6 章 对象和枚举 A1 57
6.1 单例 57
6.2 伴生对象 58
6.3 扩展类或特质的对象 58
6.4 apply 方法 59
6.5 应用程序对象 60
6.6 枚举 60
练习 62
第 7 章 包、导入和导出 A1 63
7.1 包 63
7.2 包作用域嵌套 64
7.3 链式包子句 65
7.4 文件顶部表示法 65
7.5 包级函数和变量 66
7.6 包可见性 66
7.7 导入 67
7.8 导入无处不在 67
7.9 重命名和隐藏成员 68
7.10 隐式导入 68
7.11 导出 69
练习 69
第 8 章 继承 A1 71
8.1 继承类 71
8.2 重写方法 72
8.3 类型检查和强制转换 72
8.4 超类的构造 73
8.5 匿名子类 74
8.6 抽象类 74
8.7 抽象字段 75
8.8 重写字段 75
8.9 开放类和密封类 76
8.10 受保护的字段和方法 77
8.11 构造顺序 77
8.12 Scala 继承层级结构 78
8.13 对象相等性 L1 80
8.14 多元相等性 L2 81
8.15 值类 L2 82
练习 83
第 9 章 文件和正则表达式 A1 85
9.1 读取行 85
9.2 读取字符 86
9.3 读取词法单元和数字 86
9.4 从 URL 和其他源读取 87
9.5 写入文件 87
9.6 访问目录 88
9.7 序列化 88
9.8 进程控制 A2 89
9.9 正则表达式 90
9.10 正则表达式组 92
练习 93
第 10 章 特质 L1 94
10.1 为何没有多重继承? 94
10.2 作为接口的特质 95
10.3 带具体方法的特质 96
10.4 富接口的特质 97
10.5 具有特质的对象 97
10.6 分层特质 98
10.7 重写特质中的抽象方法 99
10.8 特质中的具体字段 99
10.9 特质中的抽象字段 100
10.10 特质构造顺序 101
10.11 带参数的特质构造函数 102
10.12 扩展类的特质 103
10.13 底层机制 104
10.14 透明特质 L2 105
10.15 自类型 L2 106
练习 107
第 11 章 运算符 L1 110
11.1 标识符 110
11.2 中缀运算符 111
11.3 一元运算符 112
11.4 赋值运算符 113
11.5 优先级 113
11.6 关联性 114
11.7 apply 和 update 方法 114
11.8 unapply 方法 L2 114
11.9 unapplySeq 方法 L2 116
11.10 unapply 和 unapplySeq 方法的替代形式 L3 116
11.11 动态调用 L2 117
11.12 类型安全的选择和应用 L2 119
练习 121
第 12 章 高阶函数 L1 123
12.1 函数作为值 123
12.2 匿名函数 124
12.3 函数参数 125
12.4 参数推断 126
12.5 有用的高阶函数 126
12.6 闭包 127
12.7 与 Lambda 表达式的互操作性 128
12.8 柯里化 129
12.9 组合、柯里化和元组化的方法 129
12.10 控制抽象 130
12.11 非本地返回 131
练习 132
第 13 章 容器 A2 134
13.1 主要的容器特质 134
13.2 可变和不可变容器 136
13.3 序列 136
13.4 列表 137
13.5 集合 138
13.6 添加或删除元素的运算符 139
13.7 常用方法 141
13.8 映射函数 143
13.9 归约、折叠和扫描 A3 144
13.10 拉链操作 146
13.11 迭代器 147
13.12 惰性列表 A3 148
13.13 与 Java 容器的互操作性 150
练习 151
第 14 章 模式匹配 A2 153
14.1 更好的 switch 153
14.2 守卫 154
14.3 模式中的变量 154
14.4 类型模式 155
14.5 Matchable 特质 156
14.6 匹配数组、列表和元组 157
14.7 提取器 158
14.8 变量声明中的模式 159
14.9 for 表达式中的模式 160
14.10 样例类 161
14.11 匹配嵌套结构 162
14.12 密封类 163
14.13 参数化枚举 164
14.14 偏函数 A3 165
14.15 case 子句中的中缀表示法 L2 166
练习 167
第 15 章 注解 A2 169
15.1 什么是注解? 169
15.2 注解放置 170
15.3 注解参数 170
15.4 Java 特性的注解 171
15.4.1 Bean 属性 171
15.4.2 序列化 172
15.4.3 受检异常 172
15.4.4 可变参数 172
15.4.5 Java 修饰符 173
15.5 优化注解 173
15.5.1 尾递归 173
15.5.2 惰性值 174
15.6 错误和警告注解 175
15.7 注解声明 176
练习 177
第 16 章 Future A2 179
16.1 在 Future 中运行任务 179
16.2 等待结果 181
16.3 Try 类 182
16.4 回调 183
16.5 组合 Future 任务 183
16.6 其他 Future 转换 185
16.7 Future 对象的方法 187
16.8 Promise 188
16.9 执行上下文 189
练习 190
第 17 章 类型参数 L2 192
17.1 泛型类 192
17.2 泛型函数 193
17.3 类型变量的边界 193
17.4 上下文边界 194
17.5 ClassTag 上下文边界 195
17.6 多重边界 195
17.7 类型约束 L3 195
17.8 型变 196
17.9 协变和逆变位置 197
17.10 对象不能是泛型 199
17.11 通配符 199
17.12 多态函数 200
练习 201
第 18 章 高级类型 L2 203
18.1 联合类型 203
18.2 相交类型 204
18.3 类型别名 205
18.4 结构类型 206
18.5 字面量类型 207
18.6 单例类型操作符 208
18.7 抽象类型 210
18.8 依赖类型 211
18.9 抽象类型边界 212
练习 213
第 19 章 上下文抽象 L3 216
19.1 上下文参数 216
19.2 上下文参数的更多内容 217
19.3 声明 given 实例 219
19.4 for 和 match 表达式中的 given 221
19.5 导入 given 221
19.6 扩展方法 222
19.7 扩展方法的查找位置 223
19.8 隐式转换 225
19.9 隐式转换规则 226
19.10 导入隐式转换 227
19.11 上下文函数 227
19.12 证据 229
19.13 @implicitNotFound 注解 230
练习 231
第 20 章 类型级编程 L3 233
20.1 匹配类型 233
20.2 异构列表 234
20.3 字面量类型算术运算 236
20.4 内联代码 238
20.5 类型类 240
20.6 镜像 242
20.7 类型类派生 244
20.8 高级类型 245
20.9 类型 Lambda 表达式 247
20.10 宏简介 248
练习 251