首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Scala标识符中的下划线用法

Scala标识符中的下划线用法
EN

Stack Overflow用户
提问于 2015-01-02 17:45:23
回答 1查看 390关注 0票数 1

我有一个关于getter/setter的课程:

代码语言:javascript
运行
复制
class Person {
    private var _age = 0

    //getter
    def age = _age

    //setter
    def age_=(value: Int): Unit = _age = value
}

我们知道我们可以像这样调用setter方法:

代码语言:javascript
运行
复制
val p = new Person()
p.age= (2)
p age= 11
p.age= 8-4

在这种情况下进行交互的原因是:在调用方法时,可以删除def age_=中的下划线(def age_=)。

我的问题是,在这种情况下,下划线是用来做什么的?

有人告诉我它是用来区分标识符中的非白体字符的。所以我试了一下:

代码语言:javascript
运行
复制
var x_= = 20
x_= = 10
x= = 5    // I got error here

为什么在这种情况下我不能移除下划线?

另外,如果我尝试多次使用下划线:

代码语言:javascript
运行
复制
val x_=_x = 1

我也有编译错误。

是否有关于下划线用法的规则?该下划线用法的术语是什么?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-01-02 17:56:41

编译错误说明了一切,真的:

代码语言:javascript
运行
复制
scala> var x_= = 20
<console>:10: error: Names of vals or vars may not end in `_='

只允许方法的名称以_=结尾。这是有意义的,因为允许val命名为x_=是非常令人费解的。

但是,下划线确实用于区分字母数字字符和特殊字符。只是在val或var的情况下,不能用=结束它

代码语言:javascript
运行
复制
scala> var x_# = 20
x_#: Int = 20
scala> x_# = 10
x_$hash: Int = 10

我不认为在特殊字符之前的第一个下划线之后允许有另一个下划线。

代码语言:javascript
运行
复制
val x_y_^ = 1    // Ok
val x_^_^ = 1    // Not ok

基于Scala语言规范

首先,标识符可以从字母开始,字母后面可以是任意的字母和数字序列。后面可以是下划线‘’字符和由字母、数字或运算符字符组成的另一个字符串。

有关有效标识符的示例,请参见链接规范中的示例1.1.1。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27746281

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档