文档章节

关于scala标识符

柳哥
 柳哥
发布于 2014/06/07 10:30
字数 1087
阅读 782
收藏 0

Scala在构造符方面有非常灵活的规则,共有四种标识符构成方式:


字母数字标识符
字母数字标识符以字母或下划线开始,之后可以跟字母、数字或下划线。“$”字符也被当作是字母但被保留作为scala编译器产生的标识符之用用户程序里的标识符不应该包含“$”字符,尽管能够编译通过,但这样做有可能导致与scala编译器产生的标识符发生名称冲撞。
Scala遵循java的驼峰式标识符习惯,例如:toString和HashSet。尽管下划线在标识符内是合法的,但在scala程序里并不常用(最好避免使用),部分原因是为了保持与Java一致,同样也由于下划线在scala代码里有许多其他非标识符用法,因此,最好避免使用像to_string、__init__或name_这样的标识符。
字段、方法参数、本地变量、还有函数的驼峰式名称,应该以小写字母开始,如:length、flatMap。类和特质的驼峰式名称应该以大写字母开始,如:BigInt、List。
注意$下划线最好不要出现在标识符中):
不建议在标识符结尾使用下划线。比如说,如果尝试如下定义,“val name_:Int = 1”,将导致编译器错误。编译器会认为你正在定义名为“name_:”的变量。为了使它编译通过,你将需要在冒号之前插入额外的空格,如:“val name_ : Int = 1”。
Scala与Java习惯不一致的地方在于常量名Scala里,constant这个词并不等同于val。尽管val在被初始化之后的确保持不变,但它仍然是变量。比方说,方法参数是val,但是每次方法被调用的时候,这些val都可以代表不同的值,而常量更持久。在Java里,习惯上常量名全都是大写的,用下划线分隔单词,如MAX_VALUE或Pi。Scala里,常量名习惯只是第一个字母必须大写。因此,java风格的常量名在scala里也可以用,但是scala的惯例是常量也用驼峰风格,如:XOffset。


操作符标识符
操作符标识符由一个或多个操作符字符组成。操作符字符是一些如:+、:、?、-或#的可打印的ASCII字符(注:更精确地说,操作符字符属于数学符号(Sm)或其它符号(So)的Unicode集,或者不包含字母、数字、括号、方括号、花括号、单或双引号、或者下划线、句号、分号、冒号、回退字符的7位ASCII字符)。以下是一些操作符标识符的例子:
+  ++  :::  <?>  :  ->
Scala编译器将在内部“粉粹”操作符标识符以转换成合法的内嵌“$”的java标识符。例如,标识符:-> 将被内部表达为$colon$minus$greater。若你想从Java代码访问这个标识符,就应使用这种内部表达方式。
Scala里的操作符标识符可以变得任意长,因此在java和scala间有一些小差别。Java里,输入x<-y将会被拆分成四个词汇符号,所以写成x < - y也没什么不同。Scala里,<-将被作为一个标识符拆分,而得到x <- y。所以如果你想要以第一种方式解释,需要在“<”与“-”字符间加一个空格。


混合标识符
混合标识符由字母数字组成,后面跟着下划线和一个操作符标识符。如:unary_+被用做定义一元的“+”操作符的方法名、myvar_=被用做定义赋值操作符的方法名。


字面量标识符
字面量标识符是用反引号`....`包括的任意字符串。如:
`x`   `<clinit>`   `yield`
思路是你可以把运行时环境认可的任意字符串放在反引号之间当作标识符。结果总被当作scala标识符。即使包含在反引号间的名称是scala保留字,这个规则也有效。在java的Thread类中访问静态的yield方法是它典型用例。你不能写Thread.yield(),因为yield是scala的保留字。然而可以在反引号里引用方法的名称,例如:Thread.`yield`()。

© 著作权归作者所有

共有 人打赏支持
柳哥
粉丝 205
博文 405
码字总数 347782
作品 0
杭州
技术主管
私信 提问
type A=B不等于import {A=>B}

本文是在“Scala热情交流群(132569382)”的讨论中整理而成。 当程序需要使用scala.collection.mutable.Map的时候,可以通过导入(import)语法: import scala.collection.mutable.{ Map =...

mj4738
2011/11/15
0
0
Scala与Java交互

代码示例 假如我们想要根据某个特定国家(比如法国)的习惯来获取并格式化当前日期, 我们可以使用以下 Scala 和 Java 混搭的代码来实现。 在 main 方法内我们首先创建了 Java Date 类的一个实例...

JackieYeah
2016/06/26
79
0
在.NET平台上使用Scala语言(上):初尝

Scala是Java平台上的一门新兴起的语言,我也不止一次在博客上提到它。我非常希望它可以取代Java这种劣质语言,让Java平台的生产力上一个台阶。事实上,Scala从一开始——或者说“很早”就对生...

mj4738
2011/11/01
0
0
ScalaReference路径

语法: Path ::= StableId | [id „.‟] this StableId ::= id | Path „.‟ id | [id „.‟] „super‟ [ClassQualifier] „.‟ id ClassQualifier ::= „[„ id „]‟ 路径不是类型本身,但......

超人学院
2016/07/06
4
0
Scala中的Actor模型支持

同Erlang一样,Scala提供了一个类库scala.actors来支持Actor模型。下面是一个简单的使用实例: import scala.actors.Actorimport scala.actors.Actor._ case class Inc(amount: Int)case cla...

开源中国驻成都办事处
2012/05/29
0
0

没有更多内容

加载失败,请刷新页面

加载更多

Java 源代码和 C 源代码的运行区别

与其他程序的执行方式和编译方式不同。 Java 源代码需要进行编译成字节码后在 Java 虚拟机上运行,这样 Java 程序能够保持独立性和跨平台功特性。 请参考下图。 https://www.cwiki.us/pages...

honeymose
今天
3
0
Apache限定目录解析PHP,限制user_agent,PHP相关的配置

Apache限定目录解析PHP 配置前访问upload/index.php [root@test-a ~]# curl -x192.168.77.139:80 'www.test.com/upload/index.php'This is upload diretory 配置,/usr/local/apache2.4/......

野雪球
今天
5
0
java.util.Concurrent.Exchanger源码

类图 源码: package java.util.concurrent;import java.util.concurrent.atomic.AtomicInteger;import java.util.concurrent.atomic.AtomicReference;import java.util.concurrent......

狼王黄师傅
今天
6
0
Kubernetes里的secret最基本的用法

Secret解决了密码、token、密钥等敏感数据的配置问题,使用Secret可以避免把这些敏感数据以明文的形式暴露到镜像或者Pod Spec中。 Secret可以以Volume或者环境变量的方式使用。 使用如下命令...

JerryWang_SAP
昨天
5
0
2018-11-20学习笔记

1. python数据类型: 给变量赋值什么样的值,变量就是什么样的类型 给变量赋值整数,变量就是整数类型 给变量赋值字符串,变量就是字符串类型 123 和“123”一样吗? 在python中 单引号 与双...

laoba
昨天
4
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部