关于scala标识符
博客专区 > 柳哥 的博客 > 博客详情
关于scala标识符
柳哥 发表于4年前
关于scala标识符
  • 发表于 4年前
  • 阅读 750
  • 收藏 0
  • 点赞 0
  • 评论 0

腾讯云 技术升级10大核心产品年终让利>>>   

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`()。

标签: scala
共有 人打赏支持
粉丝 200
博文 394
码字总数 347782
×
柳哥
如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
* 金额(元)
¥1 ¥5 ¥10 ¥20 其他金额
打赏人
留言
* 支付类型
微信扫码支付
打赏金额:
已支付成功
打赏金额: