第1章 基础A1 1
1.1 Scala解释器 1
1.2 声明值和变量 3
1.3 常用类型 4
1.4 算术和操作符重载 5
1.5 调用函数和方法 7
1.6 apply方法 8
1.7 Scaladoc 9
练习 11
第2章 控制结构和函数A1 13
2.1 条件表达式 14
2.2 语句终止 16
2.3 块表达式和赋值 16
2.4 输入和输出 17
2.5 循环 18
2.6 高级for循环和for推导式 19
2.7 函数 21
5.3 只带getter的属性 55
5.4 对象私有字段 56
5.5 Bean属性L1 57
5.6 辅助构造器 59
5.7 主构造器 60
5.8 嵌套类L1 63
练习 65
第6章 对象A1 69
6.1 单例对象 69
6.2 伴生对象 70
6.3 扩展类或特质的对象 71
6.4 apply方法 72
6.5 应用程序对象 73
6.6 枚举 74
练习 75
第7章 包和引入A1 79
7.1 包 80
7.2 作用域规则 81
7.3 串联式包语句 83
7.4 文件顶部标记法 83
7.5 包对象 84
7.6 包可见性 85
7.7 引入 85
7.8 任何地方都可以声明引入 86
7.9 重命名和隐藏方法 87
7.10 隐式引入 87
练习 88
第8章 继承A1 91
8.1 扩展类 91
8.2 重写方法 92
8.3 类型检查和转换 93
8.4 受保护字段和方法 94
8.5 超类的构造 94
8.6 重写字段 95
8.7 匿名子类 96
8.8 抽象类 97
8.9 抽象字段 97
8.10 构造顺序和提前定义L3 98
8.11 Scala继承层级 100
8.12 对象相等性L1 101
练习 102
第9章 文件和正则表达式A1 105
9.1 读取行 106
9.2 读取字符 106
9.3 读取词法单元和数字 107
9.4 从URL或其他源读取 108
9.5 读取二进制文件 108
9.6 写入文本文件 108
9.7 访问目录 109
9.8 序列化 110
9.9 进程控制A2 111
9.10 正则表达式 113
9.11 正则表达式组 114
练习 114
第10章 特质L1 117
10.1 为什么没有多重继承 117
10.2 当做接口使用的特质 119
10.3 带有具体实现的特质 120
10.4 带有特质的对象 121
10.5 叠加在一起的特质 122
10.6 在特质中重写抽象方法 124
10.7 当做富接口使用的特质 124
10.8 特质中的具体字段 125
10.9 特质中的抽象字段 126
10.10 特质构造顺序 127
10.11 初始化特质中的字段 129
10.12 扩展类的特质 131
10.13 自身类型L2 132
10.14 背后发生了什么 133
练习 135
第11章 操作符L1 139
11.1 标识符 139
11.2 中置操作符 140
11.3 一元操作符 141
11.4 赋值操作符 142
11.5 优先级 142
11.6 结合性 143
11.7 apply和 update方法 144
11.8 提取器L2 145
11.9 带单个参数或无参数的提取器L2 146
11.10 unapplySeq方法L2 147
练习 148
第12章 高阶函数L1 151
12.1 作为值的函数 151
12.2 匿名函数 152
12.3 带函数参数的函数 153
12.4 参数(类型)推断 154
12.5 一些有用的高阶函数 155
12.6 闭包 156
12.7 SAM转换 157
12.8 柯里化 158
12.9 控制抽象 159
12.10 return表达式 161
练习 162
第13章 集合A2 165
13.1 主要的集合特质 166
13.2 可变和不可变集合 167
13.3 序列 168
13.4 列表 169
13.5 可变列表 170
13.6 集 171
13.7 用于添加或去除元素的操作符 173
13.8 常用方法 175
13.9 将函数映射到集合 177
13.10 化简、折叠和扫描A3 178
13.11 拉链操作 181
13.12 迭代器 183
13.13 流A3 184
13.14 懒视图 185
13.15 与Java集合的互操作 186
13.16 线程安全的集合 188
13.17 并行集合 188
练习 190
第14章 模式匹配和样例类A2 193
14.1 更好的switch 194
14.2 守卫 195
14.3 模式中的变量 195
14.4 类型模式 196
14.5 匹配数组、列表和元组 197
14.6 提取器 198
14.7 变量声明中的模式 199
14.8 for表达式中的模式 199
14.9 样例类 200
14.10 copy方法和带名参数 201
14.11 case语句中的中置表示法 201
14.12 匹配嵌套结构 202
14.13 样例类是邪恶的吗 203
14.14 密封类 204
14.15 模拟枚举 205
14.16 Option类型 205
14.17 偏函数L2 207
练习 207
第15章 注解A2 211
15.1 什么是注解 212
15.2 什么可以被注解 212
15.3 注解参数 213
15.4 注解实现 214
15.5 针对Java特性的注解 216
15.5.1 Java修饰符 216
15.5.2 标记接口 216
15.5.3 受检异常 217
15.5.4 变长参数 217
15.5.5 JavaBeans 218
15.6 用于优化的注解 219
15.6.1 尾递归 219
15.6.2 跳转表生成与内联 220
15.6.3 可省略方法 221
15.6.4 基本类型的特殊化 222
15.7 用于错误和警告的注解 223
练习 224
第16章 XML处理A2 227
16.1 XML字面量 228
16.2 XML节点 228
16.3 元素属性 230
16.4 内嵌表达式 231
16.5 在属性中使用表达式 232
16.6 特殊节点类型 233
16.7 类XPath表达式 234
16.8 模式匹配 235
16.9 修改元素和属性 236
16.10 XML变换 237
16.11 加载和保存 238
16.12 命名空间 241
练习 242
第17章 类型参数L2 245
17.1 泛型类 246
17.2 泛型函数 246
17.3 类型变量界定 246
17.4 视图界定 248
17.5 上下文界定 249
17.6 Manifest下文界定 249
17.7 多重界定 250
17.8 类型约束L3 250
17.9 型变 252
17.10 协变和逆变点 253
17.11 对象不能泛型 255
17.12 类型通配符 256
练习 257
第18章 高级类型L2 259
18.1 单例类型 259
18.2 类型投影 261
18.3 路径 262
18.4 类型别名 263
18.5 结构类型 264
18.6 复合类型 265
18.7 中置类型 266
18.8 存在类型 267
18.9 Scala类型系统 268
18.10 自身类型 269
18.11 依赖注入 271
18.12 抽象类型L3 272
18.13 家族多态L3 274
18.14 高等类型L3 278
练习 281
第19章 解析A3 285
19.1 文法 286
19.2 组合解析器操作 287
19.3 解析器结果变换 289
19.4 丢弃词法单元 291
19.5 生成解析树 291
19.6 避免左递归 292
19.7 更多的组合子 294
19.8 避免回溯 296
19.9 记忆式解析器 297
19.10 解析器说到底是什么 297
19.11 正则解析器 299
19.12 基于词法单元的解析器 299
19.13 错误处理 302
练习 302
第20章 Actor A3 305
20.1 创建和启动Actor 306
20.2 发送消息 307
20.3 接收消息 308
20.4 向其他Actor发送消息 309
20.5 消息通道 310
20.6 同步消息和Future 311
20.7 共享线程 313
20.8 Actor的生命周期 316
20.9 将多个Actor接在一起 317
20.10 Actor的设计 318
练习 320
第21章 隐式转换和隐式参数L3 323
21.1 隐式转换 324
21.2 利用隐式转换丰富现有类库的功能 324
21.3 引入隐式转换 325
21.4 隐式转换规则 326
21.5 隐式参数 328
21.6 利用隐式参数进行隐式转换 329
21.7 上下文界定 330
21.8 类型证明 331
21.9 @implicitNotFound注解 333
21.10 CanBuildFrom解读 333
练习 336
第22章 定界延续L3 339
22.1 捕获并执行延续 340
22.2 “运算当中挖个洞” 341
22.3 reset和shift的控制流转 342
22.4 reset表达式的值 343
22.5 reset和shift表达式的类型 344
22.6 CPS注解 345
22.7 将递归访问转化为迭代 347
22.8 撤销控制反转 349
22.9 CPS变换 353
22.10 转换嵌套的控制上下文 356
练习 358
词汇表 360
索引 367