我有一个关于getter/setter的课程:
class Person {
private var _age = 0
//getter
def age = _age
//setter
def age_=(value: Int): Unit = _age = value
}
我们知道我们可以像这样调用setter方法:
val p = new Person()
p.age= (2)
p age= 11
p.age= 8-4
在这种情况下进行交互的原因是:在调用方法时,可以删除def age_=
中的下划线(def age_=
)。
我的问题是,在这种情况下,下划线是用来做什么的?
有人告诉我它是用来区分标识符中的非白体字符的。所以我试了一下:
var x_= = 20
x_= = 10
x= = 5 // I got error here
为什么在这种情况下我不能移除下划线?
另外,如果我尝试多次使用下划线:
val x_=_x = 1
我也有编译错误。
是否有关于下划线用法的规则?该下划线用法的术语是什么?
发布于 2015-01-02 17:56:41
编译错误说明了一切,真的:
scala> var x_= = 20
<console>:10: error: Names of vals or vars may not end in `_='
只允许方法的名称以_=
结尾。这是有意义的,因为允许val命名为x_=
是非常令人费解的。
但是,下划线确实用于区分字母数字字符和特殊字符。只是在val或var的情况下,不能用=
结束它
scala> var x_# = 20
x_#: Int = 20
scala> x_# = 10
x_$hash: Int = 10
我不认为在特殊字符之前的第一个下划线之后允许有另一个下划线。
val x_y_^ = 1 // Ok
val x_^_^ = 1 // Not ok
基于Scala语言规范:
首先,标识符可以从字母开始,字母后面可以是任意的字母和数字序列。后面可以是下划线‘’字符和由字母、数字或运算符字符组成的另一个字符串。
有关有效标识符的示例,请参见链接规范中的示例1.1.1。
https://stackoverflow.com/questions/27746281
复制相似问题