编辑: ACcyL | 2013-04-26 |
2 按惯例,标识符符合最长匹配原则.例如: Big_bob++=?def? 可以分解为三个标识符 big_bob,++=,和def.变量标识符(varid,小写字母开头) 和常量标识符(没有小写字母开头的限制)的模式匹配规则有所不同. 以下命名是保留字,不能用作词法标识符的语法类 id. abstract case catch class def do else extends false final finally for forSome if implicit import lazy match new null object override package private protected requires return sealed super this throw trait try true type val var while with yield Unicode 算符\u21D2 ??? 和\u2190 ?←?以及它们的 ASCII 对应?=>
?也是保 留字 示例 1.1.1 以下是一些标识符的示例 x Object maxIndex p2p empty_? + `yield` αρετη _y dot_product_* __system _MAX_LEN_ 示例 1.1.2 反引号括起来的字符串是那些 Scala 中是保留字的 Java 中标识符的一 个方法.例如,在Scala 中Thread.yield()是非法的,因为 yield 是保留字.但 是可以这样调用: Thread.`yield`() 1.2. 换行字符 语法: semi nl{nl} Scala 是一个基于行的语言.分号和换行均可作为语句的结束.如果换行满足以下三 个条件则会被认为是一个特殊符号?nl?: 1. 换行之前的符号是一个语句的结束 2. 换行之后的符号是一个语句的开始 3. 符号处在一个允许多语句的区域中 可以作为语句结束的符号是:常量,标识符,保留字以及以下的分隔符: this null true false return type - ) ] } 词法
3 可以作为语句开始的符号是除了以下分隔符及保留字之外的所有 Scala 符号: catch else extends finally forSome match requires with yield ] } 符号 case 只有在 class 或者 object 符号之前才可以作为语句开始. 多行语句许可的条件: 1. 整个 Scala 源文件中,除了换行被禁止的嵌套区域 2. 在匹配的{与}之间,除了换行被禁止的嵌套区域 多行语句在以下区域被禁止: 1. 在匹配的(与)之间,除了换行被允许的嵌套区域. 2. 在匹配的[与]之间,除了换行被允许的嵌套区域. 3. 在case 符号以及与其匹配的=>
符号之间,除了换行被允许的嵌套区域. 4. XML 模式下的区域(§1.5). 注意在 XML 中大括号{..}被转义,字符串并不是符号.因此当换行被允许时不要关 闭区域. 一般地,即使连续的两个非换行符号中有多行,也只会插入一个 nl 符号.然而,如 果两个符号被至少一个空行(行中没有可打印字符)分隔开,那么两个符号中就会插入两个 nl 符号. Scala 语法(全文见附录 A)允许可选的 nl 符号,但分号不在此列.这样在某些位置 换行并不会结束一个表达式或语句.这些位置如下所列: 以下位置允许多个换行符号(换了分号是不行地): - 在条件表达式(§6.16) 或while 循环(§6.17)的条件及下一个表达式间 - For 循环(§6.19)中计数器及下一个表达式间 - 类型定义或声明中,在开始的 type 关键字之后 以下位置允许单个换行: - 在一个是当前语句或表达式的合法继续的大括号 { 前-如果下行的第一个符号是一个表达式的开始(§6.12),本行的中缀算符之后 - 在一个参数子句前(§4.6) - 在一个标注(§11)之后 示例 1.2.1 以下是跨两行的四个合法语句.两行间的换行符号并未作为语句结束. if(x >
0) x = x C
1 while(x >
0) x = x /
2 for(x
10 加一个换行后就成了两个表达式: x <
0 || x >
10 示例 1.2.4 以下代码定义了一个单一的柯里化的函数: def func(x: Int) (y: Int) = x + y 加一个换行后,同样的代码就成了一个抽象函数和一个非法语句 def func(x: Int) (y: Int) = x + y 示例 1.2.5 以下代码是一个加了标注的........