文档章节

关于scala标识符

柳哥
 柳哥
发布于 2014/06/07 10:30
字数 1087
阅读 769
收藏 0
点赞 0
评论 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
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
Scala学习笔记(12)-特质、包和引用

1.特质:trait是Scala里代码复用的基础单元。特质封装了方法和字段的定义,并可以通过混入到类中重用它们。不像类的继承那样,每个类都只能继承唯一的超类,类可以混入任意个特质。一旦特质被...

山海经
2013/08/31
0
0
Scala 的学习笔记系列(持续更新中)

最近学习 Scala,因它是灵活的函数式编程,还有就是能为 PlayFramework 2.0 服务,看的是 《Programming in Scala》 那本书,并记下自己认为值得记录的东西,列举 Scala 用元组/列表类型实现...

YanbinQ
2012/10/26
0
1
Scala之集合Collection

概述 Scala的集合类可以从三个维度进行切分: 可变与不可变集合(Immutable and mutable collections) 静态与延迟加载集合 (Eager and delayed evaluation ) 串行与并行计算集合(Sequent...

bluishglc
2016/04/07
0
0
Scala 技术周刊 | 第 27 期

这里有最新的 Scala 社区动态、技术博文。 微信搜索 「scalacool」关注我们,及时获取最新资讯。 深度阅读 Replacing IntelliJ with Emacs for Scala Development 用 Emacs 进行 Scala 开发 ...

ScalaCool
2017/11/27
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

微信分享的细节

分享的缩略图要求: 一、图片大小小于32k 二、图片的尺寸为 宽度 :128px 高度:128px 分享title 和 description 出现金额等 以上情况存在会导致触发分享按钮 但是页面没有反应...

Js_Mei
4分钟前
0
0
【2018.07.23学习笔记】【linux高级知识 Shell脚本编程练习】

1、编写shell脚本,计算1-100的和; #!/bin/bashsum=0for i in `seq 1 100`do sum=$[$sum+$i]doneecho $sum 2、编写shell脚本,要求输入一个数字,然后计算出从1到输入数字的和,要求...

lgsxp
6分钟前
0
0
xss攻防浅谈

导读 XSS (Cross-Site Script) 攻击又叫跨站脚本攻击, 本质是一种注入攻击. 其原理, 简单的说就是利用各种手段把恶意代码添加到网页中, 并让受害者执行这段脚本. XSS能做用户使用浏览器能做的...

吴伟祥
7分钟前
0
0
js回调的一次应用

function hideBtn(option) { if (option == 1) { $("#addBtn").hide(); $("#addSonBtn").hide(); }}$("body").on("click", "#selectBtn", function () {......

晨猫
13分钟前
0
0
C++_读写ini配置文件

1.WritePrivateProfileString:

一个小妞
13分钟前
0
0
通往阿里,BAT的50+经典Java面试题及答案解析(上)

Java是一个支持并发、基于类和面向对象的计算机编程语言。下面列出了面向对象软件开发的优点: 代码开发模块化,更易维护和修改。 代码复用。 增强代码的可靠性和灵活性。 增加代码的可理解性...

Java大蜗牛
13分钟前
0
0
数据库两大神器【索引和锁】

前言 只有光头才能变强 索引和锁在数据库中可以说是非常重要的知识点了,在面试中也会经常会被问到的。 本文力求简单讲清每个知识点,希望大家看完能有所收获 声明:如果没有说明具体的数据库...

Java3y
17分钟前
0
0
Application Express安装

Application Express安装文档 数据库选择和安装 数据库选择 Oracle建议直接12.2.0.1.0及以上的版本,12.1存在20618595bug(具体可参见官方文档) Oracle 12c 中安装oracle application expr...

youfen
29分钟前
0
0
OpenMessaging概览

序 本文主要研究一下OpenMessaging 架构图 namespace,类似cgroup的namespace,用来进行安全隔离,每个namespace有自己的producer、consumer、topic、queue等 producer,消息生产者有两类,一...

go4it
34分钟前
0
0
MySQL索引类型

MySQL目前主要有以下几种索引类型: 1.普通索引 2.唯一索引 3.主键索引 4.组合索引 5.全文索引 https://www.cnblogs.com/luyucheng/p/6289714.html...

灯下草虫鸣_
35分钟前
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部