文档章节

关于scala标识符

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

© 著作权归作者所有

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

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

超人学院
2016/07/06
4
0
在.NET平台上使用Scala语言(上):初尝

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

mj4738
2011/11/01
0
0
再谈Scala集合

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

bluishglc
2017/12/14
0
0

没有更多内容

加载失败,请刷新页面

加载更多

怎样使用主流缓存更新策略来减少性能消耗?

在互联网项目开发中,缓存的应用是非常普遍了,缓存可以帮助页面提高加载速度,减少服务器或数据源的负载。 一、为什么需要缓存? 一般在项目中,最消耗性能的地方就是后端服务的数据库了。而...

Java干货分享
26分钟前
1
0
杭州云栖大会阿里云放大招,8K远程医疗会诊引关注

大家每天都会照镜子,镜子里的一切都清清楚楚,足可乱真,可是你想过有一天看视频直播就像照镜子么? 这不,在云栖大会的C馆里,8K超高清直播体验馆前异常火爆,在这里,很多参会者都围着有1...

阿里云云栖社区
28分钟前
16
0
C++获取系统盘符极简方法

盘符获取 std::shared_ptr<std::list<wchar_t>> disks(void) {wchar_t data[255];return [&](int length)->std::shared_ptr<std::list<wchar_t>> {auto result = std::make_shared< s......

CHONGCHEN
28分钟前
1
0
Python 操作samba文件服务器

# /usr/bin/env python# -*- coding:utf-8 -*-from smb.SMBConnection import SMBConnectionconn = SMBConnection('root', '123456', 'any', '', use_ntlm_v2 = True)assert conn.......

China丶小可
35分钟前
1
0
vue引入echart.js打包时特别大

link : https://www.cnblogs.com/strinkbug/p/5786222.html 一、i在html中添加script标签如下: <script src="//cdn.bootcss.com/echarts/3.2.2/echarts.simple.min.js"></script> 二、在web......

Js_Mei
38分钟前
1
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部