前言: 本书已有中文版, 此笔记并不是对原教程的翻译, 而是围绕示例进行选摘, 并顺便将所有示例改成中文命名(不拘泥于原本命名用词, 而是融入中文特色).
代码在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