编辑: ACcyL | 2013-04-26 |
111 前言 Scala 是一门类 Java 的编程语言,它结合了面向对象编程和函数式编程.Scala 是 纯面向对象的,每个值都是一个对象,对象的类型和行为由类定义,不同的类可以通过混 入(mixin)的方式组合在一起.Scala 的设计目的是要和两种主流面向对象编程语言 Java 和C#实现无缝互操作,这两种主流语言都非纯面向对象. Scala 也是一门函数式变成语言,每个函数都是一个值,原生支持嵌套函数定义和高 阶函数.Scala 也支持一种通用形式的模式匹配,模式匹配用来操作代数式类型,在很多 函数式语言中都有实现. Scala 被设计用来和 Java 无缝互操作(另一个修改的 Scala 实现可以工作在.NET 上) .Scala 类可以调用 Java 方法,创建 Java 对象,继承 Java 类和实现 Java 接口. 这些都不需要额外的接口定义或者胶合代码. Scala 始于
2001 年,由洛桑联邦理工学院(EPFL)的编程方法实验室研发.2003 年11 月发布 1.0 版本,本书描述的是
2006 年3月发布的第二版,作为语言定义和一些核 心库模块的参考手册,本书的目的不是教授 Scala 语言或它的概念,这些可以参考其他文 档[Oa04, Ode06, OZ05b, OCRZ03, OZ05a]. Scala 是很多人共同努力的结果.1.0 版的设计和实现由 Philippe Altherr, Vincent Cremet, Gilles Dubo chet, Burak Emir, Stéphane Micheloud, Nikolay Mihaylov, Michel Schinz, Erik Sten man, Matthias Zenger 和 本书作者完成;
Iulian Dragos, Gilles Dubochet, Philipp Haller, Sean McDirmid, Lex Spoon 和Geoffrey Washburn 加入了第二版语言和工具的研发. 通过参与富有活力和灵感的讨论,并对本书的旧版提出意见,Gilad Bracha, Craig Cham bers, Erik Ernst, Matthias Felleisen, Shriram Krishnamurti, Gary Leavens, Sebastian Maneth, Erik Meijer, Klaus Ostermann, Didier Rémy, Mads Torgersen, 和Philip Wadler 帮助形成了语言的设计.还有Scala 邮件列表上的贡献者,他们给予了非常有用的回馈,帮助我们改进语言和工具. 词法
1 1.词法 Scala 程序使用的字符集是 Unicode 的基本多文种平面字符集;
目前不支持 Unicode 中增补的字符.本章定义了 Scala 词法的两种模式:Scala 模式与 XML 模式. 如果没有特别说明,以下对 Scala 符号的描述均指 Scala 模式,常量字符?c?指ASCII 段\u0000-\u007F. 在Scala 模式中,十六进制 Unicode 转义字符会被对应的 Unicode 字符替换. UnicodeEscape u{u} hexDigit hexDigit hexDigit hexDigit hexDigit ::= ?0?|...|?9?|?A?|...|?F?|...|?a?|...|?f?| 符号由下面几类字符构成(括号中是 Unicode 通用类别): 1. 空白字符.\u0020|\u0009| \u000D|\u000A 2. 字母,包括小写 (Ll),大写 (Lu),词首字母大写 (Lt),其他 (Lo),数字 (Nl),以及\u0024 ?$? 和\u005F ?_?,这两个字母归类为大写字母 3. 数字 ?0?|...|?9? 4. 括号 5. 分隔符 6. 算符字符.由所有的没有包括在以上分类中的可打印 ASCII 字符\u0020- \u007F,数学符号(Sm)以及其他符号(So)构成 1.1. 标识符 语法: op ::= opchar {opchar} varid ::= lower idrest plainid ::= upper idrest | varid | op id ::= plainid | ?\?? stringLit ?\?? idrest ::= {letter | digit}[?_? op] 有三种方法可以构造一个标识符.第一,首字符是字母,后续字符是任意字母和数字. 这种标识符还可后接下划线?_?,然后是任意字母和数字.第二,首字符是算符字符,后 续字符是任意算符字符.这两种形式是普通标识符.最后,标识符可以是由反引号?`?括 起来的任意字符串(宿主系统可能会对字符串和合法性有些限制).这种标识符可以由除了 反引号的任意字符构成. 换行字符