文档章节

关于scala标识符

柳哥
 柳哥
发布于 2014/06/07 10:30
字数 1087
阅读 787
收藏 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`()。

© 著作权归作者所有

共有 人打赏支持
柳哥
粉丝 206
博文 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
ScalaReference路径

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

超人学院
2016/07/06
4
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
再谈Scala集合

集合!集合!一个现代语言平台上的程序员每天代码里用的最多的大概就是该语言上的集合类了,Scala的集合丰富而强大,至今无出其右者,所以这次再回过头再梳理一下。 本文原文出处: 本文原文链...

bluishglc
2017/12/14
0
0

没有更多内容

加载失败,请刷新页面

加载更多

Cookie 显示用户上次访问的时间

import javax.servlet.ServletException;import javax.servlet.annotation.WebServlet;import javax.servlet.http.Cookie;import javax.servlet.http.HttpServlet;import javax.serv......

gwl_
今天
1
0
网络编程

第14天 网络编程 今日内容介绍  网络通信协议  UDP通信  TCP通信 今日学习目标  能够辨别UDP和TCP协议特点  能够说出UDP协议下两个常用类名称  能够说出TCP协议下两个常用类名称...

stars永恒
今天
1
0
二进制相关

二进制 众所周知计算机使用的是二进制,数字的二进制是如何表示的呢? 实际就是逢二进一。比如 2 用二进制就是 10。那么根据此可以推算出 5的二进制等于 10*10+1 即为 101。 在计算机中,负数以...

NotFound403
昨天
3
0
day22:

1、写一个getinterface.sh 脚本可以接受选项[i,I],完成下面任务: 1)使用格式:getinterface.sh [-i interface | -I ip] 2)当用户使用-i选项时,显示指定网卡的IP地址;当用户使用-I选项...

芬野de博客
昨天
2
0
Spring Cloud Alibaba基础教程:使用Nacos实现服务注册与发现

自Spring Cloud Alibaba发布第一个Release以来,就备受国内开发者的高度关注。虽然Spring Cloud Alibaba还没能纳入Spring Cloud的主版本管理中,但是凭借阿里中间件团队的背景,还是得到不少...

程序猿DD
昨天
4
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部