前言: 本书已有中文版, 此笔记并不是对原教程的翻译, 而是围绕示例进行选摘, 并顺便将所有示例改成中文命名(不拘泥于原本命名用词, 而是融入中文特色).
代码在Scala 2.12, Java 1.8.0_45下测试通过. 前十章Scala 2.12.4, 之后2.12.8
10.14 中, 可复现问题如下:
scala> for ((行1, 行2) <- Array(1,2) zip Array("a", "b")) | yield 行1 + 行2 <console>:12: error: not found: value 行1 for ((行1, 行2) <- Array(1,2) zip Array("a", "b")) ^ <console>:12: error: not found: value 行2 for ((行1, 行2) <- Array(1,2) zip Array("a", "b")) ^ <console>:13: error: not found: value 行1 yield 行1 + 行2 ^ <console>:13: error: not found: value 行2 yield 行1 + 行2 ^ scala> for ((l1, l2) <- Array(1,2) zip Array("a", "b")) | yield l1 + l2 res1: Array[String] = Array(1a, 2b) 深究后基本确定为语言设计限制: Scala疑似中文命名问题后续
命令行交互环境中, 错误信息对中文字符的定位不准. 这很干扰排错. 比较如下两个同样出错信息:
scala> println(["2"]) <console>:1: error: illegal start of simple expression println(["2"]) ^ scala> 打印参数(["2"]) <console>:1: error: illegal start of simple expression 打印参数(["2"]) ^ the3rdVariableIsHere